Являются ли шаблоны явных специализаций? - PullRequest
1 голос
/ 29 мая 2019

Согласно [temp.spec] p4 , специализация - это класс / функция / [...], который создается или явно специализируется. [temp.expl.spec] p19 утверждает, что некоторые явные специализации являются шаблонами, что приводит меня к убеждению, что явные специализации - это специализация (в смысле «сущность, сгенерированная из шаблона»), а не шаблоны (иногда ).

Мой вопрос в том, являются ли конкретные специализации фактическими конкретными сущностями (класс / функция / [...]) или они являются шаблонами. Если нет, то что именно они не являются шаблонами или специализациями (в соответствии с определением, предоставленным [temp.spec] p4)

1 Ответ

2 голосов
/ 29 мая 2019

Ваш вопрос предполагает двоичный статус, который не должен существовать, что явная специализация - это либо шаблон, либо "конкретная сущность".

Явная специализация может быть или не быть шаблоном. Не шаблонная явная специализация - это специализация. Как указано в самом тексте вы цитируете:

Специализация - это класс, переменная, функция или член класса, который является либо созданным, либо явно специализированным.

Таким образом, явные специализации ведут себя как специализации . Создание экземпляра шаблона (неявное или явное) создает специализации, если параметры не соответствуют явной специализации. Так что вместо этого к этому привыкаешь. Но независимо от того, генерируются ли они в результате реализации или явной специализации, специализации рассматриваются как специализации.

Так, например, различные явные специализации одного и того же шаблона функции обрабатываются не с помощью правил разрешения перегрузки, а с помощью вывода аргументов шаблона. Это ничем не отличается от любого другого случая специализации этого шаблона.

...