Код: Выделить всё
union a {
int b;
int c;
};
template void b() {}
template void b< &a::b >() {}
template void b< &a::c >() {}
ошибка C2766: явная специализация; 'void b
(void)' уже определен
Ссылка на компилятор-эксплорер: https://godbolt .org/z/TfoMjv8ch
Как видно в CE, в gcc/clang искажение имен специализаций кодирует имена членов объединения:
Код: Выделить всё
_Z1bIXadL_ZN1a1bEEEEvv
^
_Z1bIXadL_ZN1a1cEEEEvv
^
Код: Выделить всё
??$b@$0A@@@YAXXZ
^
Подробнее здесь: https://stackoverflow.com/questions/781 ... d-distinct