https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97174
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- With an instantiation added: int main () { N::conv (1); } we get t.C: In function 'int main()': t.C:13:25: error: call of overloaded 'conv(int)' is ambiguous 13 | int main () { N::conv (1); } | ^ t.C:6:36: note: candidate: 'std::make_unsigned_t<T> N::conv(T) [with T = int; std::make_unsigned_t<T> = unsigned int]' 6 | typename std::make_unsigned_t<T> conv (T); | ^~~~ t.C:10:6: note: candidate: 'long int N::conv(T) [with T = int]' 10 | long N::conv (T val) | ^ eventually no diagnostic is required for the template definition.