Thanks to Eric and Joel, it now works. Just for info, the solution:
// grammar forbidding address of for terminals
struct state_grammar : proto::not_proto::_ >
{};
// Forward-declare an expression wrapper
template<typename Expr>
struct make_state;
struct sm_domain
: proto::domain< proto::generator, state_grammar >
{};
template<typename Expr>
struct make_state
: proto::extends
{
typedef
proto::extends
base_type;
// Needs a constructor
make_state(Expr const &e = Expr())
: base_type(e)
{}
// Unhide Proto's overloaded assignment operator
using base_type::operator=;
};
Then, to define a terminal:
struct s1: make_state::type>{};
Thanks a lot!
Regards,
Christophe
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us