https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99910
--- Comment #1 from Hans-Peter Nilsson <hp at gcc dot gnu.org> --- It looks like commit 41019bfae2673a818 / r11-8011 "libstdc++: Clarify static_assert message" accidentally swept this under the carpet. If I cut off the last word, " type", i.e. the second changed line changed to be " substituting _Tp must not be an lvalue reference", the ICE reappears. I have not ran valgrind or used gcc sanitize-address on this, but that would be a start.