https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110256
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- MSVC also accepts this code ... It might be the case that clang is incorrectly rejecting it. Basically the way I understand is that b will always be false due to incorrect usage of std::integral/c here. templates can be used as a template argument even.