Почему я могу использовать авто для частного типа?

Меня почему-то удивило, что следующий код компилируется и запускается (vc2012 & gcc4.7.2)

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

int main() {
    Foo f;
    // Foo::Bar b = f.Baz();  // error
    auto b = f.Baz();         // ok
    std::cout << b.i;
}

Правильно ли, что этот код компилируется нормально? И почему это правильно? Почему я могу использовать auto для закрытого типа, а я не могу использовать его имя (как и ожидалось)?

134
задан hansmaad 17 February 2016 в 11:02
поделиться