我对以下代码编译和运行感到惊讶(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
在私有类型上使用,而我不能使用它的名称(如预期的那样)?