https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93169
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #2) > (In reply to Andrew Pinski from comment #1) > > I want to say b<e>::c::c is not a valid constexpr constructor. Because > > b<e>::c's field h's constructor is not constexr. If that is the case, then > > should be accepts invalid code. It's a template. If the constructor doesn't meet the requirements of a constexpr constructor, then the constexpr specifier is just ignored. So it's not invalid. > Or maybe I don't understand constexpr that well :). e::e() is definitely > not a valid constexpr though :). Which is OK because it's not marked constexpr.