On Wed, Sep 8, 2010 at 5:57 PM, Steven Watanabe <watanabesj@gmail.com> wrote:
AMDG


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!

- Rob.