Zugriff auf private verschachtelte Klasse

Ich habe diese einfache Klasse gemacht, die immer noch mit meinem Verstand spielt:

class A {
private:
    class B {};

public:
    B getB() {
        return B();
    };
};

Als C ++ 03 kompiliert diese Klasse gut, aber es gibt einfach kein schön aussehender Weg, um das Ergebnis von @ zuzuweisgetB() auf einen Wert in dem Sinne, dass:

A::B b = A().getB();

Kompiliert nicht.

Ich habe es mithilfe einer Zwischenvorlage erhalten, und zwar auf folgende Weise:

template <typename T>
struct HideType {
    typedef T type;
};

HideType<A::B>::type b = A().getB();

Aber das sieht einfach furchtbar aus, für diese einfache Aufgabe, eine A :: B-Wertvariable zu erhalten.

Dies ist ab C ++ 11 nicht mehr wahr oder zumindest nicht mit gcc. Dieser Code ist immer noch nicht gültig:

A::B b = A().getB();

Aber dieses ist gültig:

auto b = A().getB();

Ist diesbezüglich eine Lücke in der Norm?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage