n4567 [temp.class.spec.match] p2Каких правила применяются, когда аргумент частичной специализации не использует какие-либо из его параметров шаблона
Частичная специализация соответствует заданному фактическому шаблону список аргументов, если шаблон аргументы частичной специализации могут быть выведены из фактического списка аргументов шаблона (14.8.2).
template<class T, class U>
struct S{};
template<class U>
struct S<int, U>{};
S<char, int> s;
Я знаю, что частичная специализация S<int, U>
не совпадает со списком аргументов шаблона фактической char, int
, а второй аргумент U
можно вывести Фром int
accroding в 14.8.2.5.
Но я не знаю, какие правила в 14.8.2 применяются к первому аргументу int
.
14.8.2.5 [temp.deduct.type] p1
аргументы шаблона могут быть выведены в нескольких различных контекстах, но в каждом случае типа, который указан в терминах параметров шаблона (назовем его
P
) сравнивается с фактическим типом (назовем егоA
), и делается попытка найти значения аргументов шаблона (тип для параметра типа, значение для параметра не-типа или шаблон для параметра шаблона), который будет делатьP
, после подстановки выведенных значений (назовем его выведеннымA
), совместимым сA
,
В моем понимании int
в S<int, U>
является не определены в терминах параметров шаблона, так 14.8.2.5 делает не применять.
Я хочу знать, какие правила обрабатывать этот случай или вы можете исправить меня о 14.8.2.5
Другими словами: Наглядно частичная специализация S<int, U>
не соответствует char,int
, потому что char
не соответствует int
,
Я хочу знать, какие правила определяют char
не соответствует int
.
Что вы на самом деле спрашиваете? – Barry
Кроме того, вы, похоже, довольно существенно изменили содержание вопроса, так как получили ответ ... – Barry