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

Reply via email to