Command line: g++ -o File.o File.cpp Testes with gcc 4.5.0 and 4.3.1
Content of .cpp-file: #include <cstdio> template<class T> class MetaObj { public: const char *GetText(void) const { return T::GetTextStatic(); } }; class Obj { public: static const char *GetTextStatic(void) { return "Text"; } }; class Printer { public: void PrintText(const char *who, const char *what) { printf("%s: %s\n", who, what); } template<class T> void PrintTextFrom(void) { T *d = new T(); PrintText("Printer-Meta", d->GetText()); delete d; } }; template<unsigned int CNT> class MultiInfoPrinter { public: MultiInfoPrinter(void) { for (unsigned int i = 0; i < CNT; i++) { this->prn.PrintText("MultiInfoPrinter-Static", Obj::GetTextStatic()); // works this->prn.PrintText("MultiInfoPrinter-Meta", MetaObj<Obj>().GetText()); // works prn.PrintTextFrom< MetaObj<Obj> >(); // works this->prn.PrintTextFrom< MetaObj<Obj> >(); // WORKS NOT with gcc, but with icc!!! WHY??? } } private: Printer prn; }; int main(int argc, char *argv[]) { MultiInfoPrinter<2> p; } -- Summary: Compiler does not find template function if member is addressed with "this" Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: grottel at vis dot uni-stuttgart dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45501