Рассмотрим следующий код:
class A
{
private:
class B {};
public:
B f();
};
A a;
A::B g()
{
return a.f();
}
Компилятор отклоняет это - g не может вернуть A :: B, потому что A :: B является приватным.
Но предположим, что теперь я использую decltype, чтобы указать возвращаемое значение g:
class A
{
private:
class B {};
public:
B f();
};
A a;
decltype(a.f()) g()
{
return a.f();
}
Внезапно он прекрасно компилируется (с g ++> = 4.4).
Так что я в основном использовал decltype, чтобы обойти спецификатор доступа способом, которого я не смог бы в C ++ 98.
Это намеренно? Это хорошая практика?