Boost logo

Boost :

From: Fernando Cacciola (fernando_cacciola_at_[hidden])
Date: 2002-11-15 18:21:47

----- Original Message -----
From: "Jaakko Jarvi" <jajarvi_at_[hidden]>
To: "Boost mailing list" <boost_at_[hidden]>
Sent: Friday, November 15, 2002 4:50 PM
Subject: Re: [boost] Named Template Parameters implementation

> > OK, I read the docs, followed the example and *tried* to use it in the
> > library.
> > Unfortunately, I received tons of mysterious compiler errors with BCC55;
> > apparently as a result of the usage of template template parameters in
> > ntp::as_named<>.
> as_named is needed if you allow an argument slot to accept both
> unnamed and named template parameters.
> You should be able to go around the need for template template
> parameters by 'expanding' as_name by hand:
> instead of
> typename boost::ntp::as_named<Model, Model_is>::type
> write:
> typename boost::mpl::if_c<detail::is_named_parameter<Model>::value,
> T, Model_is<T> >::type
> Are there other things that cause trouble with your compiler?
Yes, unfortunately...

I have expaned is_named all the way as follow:

    typedef boost::ntp::detail::is_named_parameter<Model> Model_IsNamed ;
    typedef boost::ntp::detail::is_named_parameter<Color> Color_IsNamed ;

    typedef Model_is<Model> NamedModel ;
    typedef Color_is<Color> NamedColor ;

    typedef typename boost::mpl::if_<Model_IsNamed,Model, NamedMode>::type
ModelP ;
    typedef typename boost::mpl::if_<Color_IsNamed,Color,NamedColor>::type
ColorP ;

    typedef boost::tuple<ModelP,ColorP,Seats,Transmission> argument_tuple;

But then I get:

typedef typename features::Model Model ;

---> Member is ambiguous: Model_is<limited>::Model and

If I change

  typedef boost::tuple<ModelP,ColorP,Seats,Transmission> argument_tuple;

to this:

  typedef boost::tuple< Model_is<Model>, Color_is<Color>,Seats,Transmission>

So to fix the 'make it Named' part

I get the same error.

Perhaps BCC is getting confused when the tuple elements are *local*
instances of the Named parameters.
Because after all, if I remove the 'Make sure is Named' part and let the
test use only truly named parameters it works.
That is, if the local template parameter Model is already 'Model_is<XX>' it

Any ideas?

BTW: I get the same errors if I skip the depedent-feature part.
That is, if I use this directly:

  typedef boost::ntp::named_parameter_extractor<argument_tuple> features;

(PS: I'm leaving now, so I won't get back to this until Monday...)

> /Jaakko

Fernando Cacciola

Boost list run by bdawes at, gregod at, cpdaniel at, john at