Klassentemplates und private



  • class A {
    private:
       template<typename T> struct Internal {};
    };
    
    template<typename T> class B {
    public:
       typedef A::Internal<T> Internal;
    };
    
    void f()
    {
        A::Internal<int> x;   // Fehler
        B<int>::Internal y;   // Ok --- warum?
    }
    

    Meine Frage: warum akzeptiert der Compiler die Definition von y? Letzlich tut sie doch das gleiche wie die vorangehende Zeile, d.h. x und y hätten den gleichen Typ, oder?



  • Was hast du für einen Compiler? - Bei mir (MSVC++) kompiliert das korrekterweise nicht.

    void f()
    {
        //A::Internal<int> x;   // Fehler
        B<int>::Internal y;   // Ok --- warum?
    

    error C2248: 'A::Internal<T>' : cannot access private struct declared in class 'A'



  • drakon schrieb:

    Was hast du für einen Compiler? - Bei mir (MSVC++) kompiliert das korrekterweise nicht.
    ...

    Ich verwende GCC (4.4 und 4.3)


Anmelden zum Antworten