Re: [proto] Can't use template domain class with BOOST_PROTO_BASIC_EXTENDS

2010-10-09 Thread Eric Niebler
On 10/9/2010 12:02 PM, joel falcou wrote:
> Trying to use template domain class with BOOST_PROTO_BASIC_EXTENDS
> ends up in an error leading to the fact this ligne in the macro is
> incorrect when the Domain is template:
> 
> BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
> typedef void proto_is_aggregate_;
> typedef Domain::proto_generator proto_generator;
> 
> Obviously this is alckign a typename before Domain::proto_generator if
> Domain is actually a template class.

You mean, if Domain is a template parameter. Crap.

> Thing is used to work before ( aorund 1.40) so I guess somethign changed
> around here.
> I guess a details meta-function extracting the domain will fix that or
> am I wrong ?
> 
> namespace boost { namespace proto
> {
>   template generator_of
>   {
>   typedef typename Domain::proto_generator type;
>   };
> } }
> 
> BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
> typedef void proto_is_aggregate_;
> typedef typename generator_of::type proto_generator;
> 
> Or is it ?

That doesn't help. The "typename" would be incorrect (in C++03) if
Domain is not a template parameter. Sometimes I really love C++. This is
not one of those times.

I think I need to add (and test and document) a whole other collection
of macros to support this corner case. G...

Please file a bug. Thanks,

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com
___
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto


[proto] Can't use template domain class with BOOST_PROTO_BASIC_EXTENDS

2010-10-09 Thread joel falcou

Trying to use template domain class with BOOST_PROTO_BASIC_EXTENDS
ends up in an error leading to the fact this ligne in the macro is incorrect
when the Domain is template:

BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
typedef void proto_is_aggregate_;
typedef Domain::proto_generator proto_generator;

Obviously this is alckign a typename before Domain::proto_generator if
Domain is actually a template class.

Thing is used to work before ( aorund 1.40) so I guess somethign changed 
around here.
I guess a details meta-function extracting the domain will fix that or 
am I wrong ?


namespace boost { namespace proto
{
  template generator_of
  {
  typedef typename Domain::proto_generator type;
  };
} }

BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
typedef void proto_is_aggregate_;
typedef typename generator_of::type proto_generator;

Or is it ?




___
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto