Код: Выделить всё
struct ACS{};
template
struct AD{};
template
struct PA{
explicit PA(ACS&) {}
};
template
struct AA : public PA< AA, AD >
{
using base = PA< AA, AD >;
using base::PA;
// accepted by both: using base::base;
};
int main()
{
ACS acs;
AA aa{acs};
}
< /code>
Для меня это похоже на той же ситуации, что и Clang не видит конструкторов базовых классов, втянутых через Typedef. Однако вместо сообщения об ошибке «без сопоставления конструктора» Clang выдает это сообщение об ошибке: < /p>
:15:17: error: dependent using declaration resolved to type without 'typename'
using base::PA;
^
Код: Выделить всё
using base:: typename PA;
< /code>
глупо и отвергается обоими компиляторами. Однако более разумная альтернатива: < /p>
using typename base::PA;
< /code>
принимается без синтаксической ошибки, но теперь Clang жалуется: < /p>
:22:21: error: no matching constructor for initialization of 'AA'
AA aa{acs};
^ ~~~~~
Код: Выделить всё
:18:27: error: typename is allowed for identifiers only
using typename base::base;
~~~~~~~~~ ^
< /code>
Что происходит? Почему использование base :: pa Подробнее здесь: https://stackoverflow.com/questions/794 ... type-alias
Мобильная версия