Boost logo

Boost Users :

Subject: Re: [Boost-users] [Fusion, maybe?] Workings of ADL.
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-09-09 10:12:03


AMDG

Robert Jones wrote:
> On Wed, Sep 8, 2010 at 5:57 PM, Steven Watanabe <watanabesj_at_[hidden]>wrote:
>
>> 14.8.1/6:
>> "... But when a function template with explicit template arguments
>> is used, the call does not have the correct syntactic form unless
>> there is a function template with that name visible at the point of
>> the call...."
>>
>>
> That is just the oddest rule! Going back to my original example, I could
> make it work just by adding an arbritary declaration of at_c(),
>
> #include <boost/fusion/include/vector.hpp>
> #include <boost/fusion/include/at_c.hpp>
>
> typedef boost::fusion::vector<int, int> V;
>
> template <typename T, typename U> void at_c( const U & );
>
> int first( const V & v )
> {
> return at_c<0>( v );
> }
>
> which doesn't even need to be defined anywhere. If such a namespace-enabling
> template were to be removed, thus breaking the look-up used in my 'first()'
> function
> it would be a horrible bug to find!
>

I think the rationale is that the the compiler needs to
know that at_c is a template in order to parse the
expression. It's basically the same reason we need
to use template and typename to disambiguage.

In Christ,
Steven Watanabe


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net