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