Неоднозначная специализация шаблонов с понятиями и реальными типами: какой компилятор прав? ⇐ C++
Неоднозначная специализация шаблонов с понятиями и реальными типами: какой компилятор прав?
Рассмотрим следующий код:
#include шаблон недействительный foo() { } шаблон недействительный foo() { } шаблон void foo() { } int main() { foo(); } Он компилируется без проблем в последних версиях Clang и MSVC, но не в GCC (ссылка на godbolt)
Сборка с помощью GCC завершается неудачей:
ошибка: неоднозначная специализация шаблона 'foo' для 'void foo()' 9 | void foo() { } | ^~~~~~~~~ примечание: кандидаты: 'template void foo()' 3 | недействительный foo() { } | ^~~ примечание: 'template требует интеграла< > void foo()' 6 | недействительный foo() { } | ^~~ Какой компилятор прав? Я бы сказал, что GCC неправ, поскольку не должно быть никакой двусмысленности между специализацией через концепцию (которая сохраняет код общим) и фактической явной специализацией пользователя, которая всегда должна иметь приоритет.
Рассмотрим следующий код:
#include шаблон недействительный foo() { } шаблон недействительный foo() { } шаблон void foo() { } int main() { foo(); } Он компилируется без проблем в последних версиях Clang и MSVC, но не в GCC (ссылка на godbolt)
Сборка с помощью GCC завершается неудачей:
ошибка: неоднозначная специализация шаблона 'foo' для 'void foo()' 9 | void foo() { } | ^~~~~~~~~ примечание: кандидаты: 'template void foo()' 3 | недействительный foo() { } | ^~~ примечание: 'template требует интеграла< > void foo()' 6 | недействительный foo() { } | ^~~ Какой компилятор прав? Я бы сказал, что GCC неправ, поскольку не должно быть никакой двусмысленности между специализацией через концепцию (которая сохраняет код общим) и фактической явной специализацией пользователя, которая всегда должна иметь приоритет.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как работает специализация шаблона Auto Return Type с различными типами возврата?
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-