AMDG Robert Jones wrote:
On Wed, Sep 8, 2010 at 5:57 PM, Steven Watanabe
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
#include typedef boost::fusion::vector
V; template
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