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