Дополнительный вопрос к этому .
В основном, почему компилятор в следующем коде считает, что B
внутри A
в конструкторе C
относится к (недоступно ) конструктор базового класса B
?
struct B{};
template
struct A : private T{};
struct C : public A{
C(A); // ERROR HERE
};
Живой пример на Ideone. Вывод:
prog.cpp: 1: 9: ошибка: 'struct B B :: B' недоступна
prog.cpp: 7: 7: error: в этом контексте
Обратите внимание, что та же ошибка появляется, если вы измените аргумент конструктора на A
, A
или даже A
. Также обратите внимание, что три из MSVC10, GCC 4.7 и Clang 3.1 ToT выдадут ошибку, поэтому это должно быть что-то в спецификации C ++. Что это?