14.8.1/6 says: "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. If no such name is visible, the call is not syntactically well-formed and argument-dependent lookup does not apply. If some such name is visible, argument dependent lookup applies and additional function templates may be found in other namespaces."
Then the following example is given, which doesn't compile on GCC-4.3.3: namespace A { struct B { }; template<int X> void f(B); } namespace C { template<class T> void f(T t); } void g(A::B b) { // stripping out ill-formed cases using C::f; f<3>(b); // well-formed because C::f is visible; then // A::f is found by argument dependent lookup } g++ doesn't compile it, stating: teste.cpp: In function 'void g(A::B)': teste.cpp:12: error: no matching function for call to 'f(A::B&)' I haven't tested with 4.4, nor have found a similar bug. -- Summary: Explicit function template call doesn't trigger Koenig lookup when it should Product: gcc Version: 4.3.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rodolfo at rodsoft dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40256