Я использую Visual Studio 2012, и я нашел нечто странное. Я не пишу что-то, что обязательно необходимо для совместимости с несколькими компиляторами, но может быть позже (когда код помещается в веб, пользователи не хотят получать ошибки компилятора), но я не хочу писать что-то не так или просто не является родным.
Итак, это тестовый код:
class A{
class B{
public:
int i;
};
B myB;
public:
B& getB() { return myB; }
};
int main()
{
A a;
A::B& b = a.getB();
auto& b2 = a.getB();
}
Первая строка внутри основного списка error C2248: 'A::B' : cannot access private class declared in class 'A'
, тогда как вторая строка компилируется нормально. Интересно, автоматически предполагается, что это работает или это еще одна ошибка в Visual Studio?
У меня нет другого компилятора, с которым я могу проверить его с помощью
Вы даже можете писать такие вещи, как std::cout << b2.i << "\n";
, и он компилируется отлично.
В соответствии с комментарием πάντα ῥε, я пробовал ideone с gcc 4.8.1, и он компилируется таким же образом, первая строка - ошибка, вторая строка - отлично.