
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.