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

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

В основном, почему компилятор в следующем коде считает, что 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 ++. Что это?

13
задан Community 23 May 2017 в 11:48
поделиться