Dlaczego zapis 1
jest niedozwolony, a zapis 2
już tak? Czy da się zapis 1 przerobić tak, żeby jawnie podać typ?
Kod:
#include <cstdio>
class A
{
private:
class B
{
public:
B() { printf("A::B::B();\n"); }
void a() const { printf("A::B::a();\n"); }
void b() const { printf("A::B::b();\n"); }
} b;
public:
const B& getB() { return b; }
A() { printf("A::A();\n"); }
};
int main()
{
A a;
a.getB().a();
a.getB().b();
//const A::B& b = a.getB(); // 1
auto b = a.getB(); // 2
b.a();
b.b();
return 0;
}