J'ai été quelque peu surpris de voir que le code suivant compile et exécuter (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;
}
Est-il exact que ce code compile bien? Et pourquoi est-il correct? Pourquoi puis-je utiliser auto
sur un type privé, alors que je ne peux pas utiliser son nom (comme prévu)?