Why can I use auto on a private type?
问题 I was somehow surprised that the following code compiles and runs (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; } Is it correct that this code compiles fine? And why is it correct? Why can I use auto on a private type, while I can\'t use its name (as expected)? 回答1: The rules for auto are, for the most part, the same as for template type deduction.