Private Template Klassen / Strukturen Sichtbarkeit

Ich verstehe nicht, warum ich im folgenden Code die Funktion erstellen darfprint_private_template während sich der Compiler über @ beschweprint_private_class:

#include <cstdio>

class A
{
    private:
        template <unsigned T>
        struct B
        {

        };

        struct C
        {

        };

    public:
        template <unsigned T>
        B<T> getAb()
        { 
            return B<T>();
        }

        C getAc()
        { 
            return C();
        }
};

template<unsigned T>
void print_private_template(const A::B<T> &ab)
{
    printf("%d\n", T);
}

void print_private_class(const A::C &ac)
{
    printf("something\n");
}

int main(int, char**)
{
    A a;

    print_private_template(a.getAb<42>());

    print_private_class(a.getAc());

    return 0;
}

Ist das ein erwartetes Verhalten? ein Compiler Bug / Erweiterung?

Nur um klar zu sein, mein Ziel ist es, den Compilerfehler auf @ zu machbeid die Verwendung vonprint_private_template undprint_private_class.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage