Программы на C++. Форум разработчиков
Anonymous
Полная специализация шаблона с использованием void{} дает разные результаты в GCC и Clang
Сообщение
Anonymous » 14 фев 2026, 19:22
Этот код выводит:
при компиляции с помощью g++ v15.2.1,
при компиляции с помощью clang++, v21.1.6.
Флаг -std=c++17 используется обоими компиляторами.
Код: Выделить всё
#include
#include
#include
namespace my_namespace {
template
void format(std::ostream &os, const T &t) = delete;
template
struct is_formattable : std::false_type {};
template
struct is_formattable : std::true_type {};
}
struct S {
int a;
};
namespace my_namespace {
template void format(std::ostream &os, const S &s) {
os
Подробнее здесь: [url]https://stackoverflow.com/questions/79888996/full-template-specialization-using-void-produces-different-results-on-gcc-and[/url]
1771086125
Anonymous
Этот код выводит: [list] [*][code]1[/code] при компиляции с помощью g++ v15.2.1, [*][code]0[/code] при компиляции с помощью clang++, v21.1.6. [/list] Флаг -std=c++17 используется обоими компиляторами. [code]#include #include #include namespace my_namespace { template void format(std::ostream &os, const T &t) = delete; template struct is_formattable : std::false_type {}; template struct is_formattable : std::true_type {}; } struct S { int a; }; namespace my_namespace { template void format(std::ostream &os, const S &s) { os Подробнее здесь: [url]https://stackoverflow.com/questions/79888996/full-template-specialization-using-void-produces-different-results-on-gcc-and[/url]