Почему компилятор выбирает конструктор базового класса в списке аргументов шаблона?

Дополнительный вопрос кэтот.

В основном, в следующем коде, почему компилятор считает, чтоB внутриA<B> вCs конструктор ссылается на (недоступный) конструктор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 B B :: B» недоступна
prog.cpp: 7: 7: ошибка: в этом контексте

Обратите внимание, что та же ошибка появляется, если вы измените аргумент конструктора наA<B*>, A<B&> или дажеA<const B>, Также обратите внимание, что три из MSVC10, GCC 4.7 и Clang 3.1 ToT будут давать ошибку, поэтому это должно быть что-то в спецификации C ++.Что это такое?

Ответы на вопрос(1)

Ваш ответ на вопрос