Последующий вопрос до этого.
В основном, в следующем коде, почему компилятор считает, что конструктор 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 будут выходить из строя, поэтому это должно быть что-то в спецификации С++. Что это такое?