сама специализация, а не шаблон.

.deduct.type] пункт 8 перечисляет все выведенные контексты, но, похоже, не включаетtemplate-name<TT> гдеtemplate-name относится к шаблону класса иTT ссылается на аргумент шаблона шаблона. Это выведенный контекст?

Если это так, почему?

Если нет, рассмотрите следующий код:

template<template<typename> class U, template<typename> class V>
struct foo {};

template<template<typename> class U>
struct foo<U, U> {}; 

int main() {}

Этот код компилируетсяпод Clang 7.0.0 а такжеGCC 8.0.1Это означает, что компиляторы считают частичную специализацию более специализированной, чем основной шаблон, что означаетU а такжеV в первичном шаблоне успешно выводятсяfoo<U, U>, Это ошибка компилятора?

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

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