Hi all,
 
Here am I already at the 2nd compiler (VC9SP1) crash of the week (not kidding...):

fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'f:\dd\vctools\compiler\utc\src\p2\p2symtab.c', line 5809)

Attached is a test file producing the problem. The crash happens when I add BOOST_PROTO_DEFINE_OPERATORS. Am I doing something wrong?
 
Sadly, this was a workaround to avoid deriving my class from proto::terminal because of a problem (supposedly) created by the address-of operator. Can someone save my day and tell me if there is a way to deactivate this operator for terminals?
Concretely, I have:

struct Empty: public state<>, proto::terminal<state_tag>
 
Which brings me, here:
 
&::boost::fusion::at_key<State>(xxx) // xxx being a fusion set containing Empty
 
the following problem:

1>f:\projects\MSM2\SM\boost/msm/back/state_machine.hpp(1061) : error
C2784: '::boost::enable_if<is_pseudo_exit<StateType>::type,void>::type
boost::msm::back::state_machine<Derived,HistoryPolicy,CopyPolicy>::execute_entry(StateType
*,const EventType &,FsmType &,boost::msm::back::dummy<__formal>)' :
could not deduce template argument for 'StateType *' from 'const
boost::proto::exprns_::expr<Tag,Args,Arity>'
1> with
1> [
1> Derived=`anonymous-namespace'::player_,
1> HistoryPolicy=boost::msm::back::NoHistory,
1> CopyPolicy=boost::msm::back::DeepCopy,
1> __formal=2
1> ]
1> and
1> [
1> Tag=boost::proto::tag::address_of,
1> Args=boost::proto::argsns_::list1<boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<boost::msm::front::state_tag>>
&>,
1> Arity=1
1> ]
 
 
 I have another workaround but it requires more typing and is quite
ugly, so any help would be greatly appreciated.

 
Thanks,
Christophe


Windows Live™: Keep your life in sync. Check it out!