https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55722
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |jason at gcc dot gnu.org Resolution|--- |INVALID --- Comment #4 from Jason Merrill <jason at gcc dot gnu.org> --- The static_assert only fires once because we only instantiate a particular class or function once. When we instantiate __assert_callable<std::false_type>, we trip the static_assert, but later uses get the result of the earlier instantiation. I don't think factoring out static_assert into a separate template is going to do what you want.