The following C++ code should not compile: template<class T> int t(T i) { return f (i); // error: f not visible here }
int f (int i) { return i; } int main() { return t(1); } The C++ standard clause 14.6.3 states that names should be looked up from the point they are used. I.e. functions defined after that point are not visible. This is true for regular functions, but GCC does not get this right for template functions. -- Summary: Bad name lookup for templates Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: andrew dot stubbs at st dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29131