https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83835
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-01-27 CC| |jason at gcc dot gnu.org, | |msebor at gcc dot gnu.org Known to work| |6.4.0 Summary|constexpr constructor |[7/8 Regression] constexpr |rejected in c++17 mode |constructor rejected in |(regression WRT c++14) |c++17 mode (regression WRT | |c++14) Ever confirmed|0 |1 Known to fail| |7.2.0, 8.0 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- Confirmed with the slightly simplified test case below. Other compilers accept the code, as does GCC 6.4.0. The regression was introduced in GCC 7.0 by r240889. $ cat pr83835.C && gcc -S -Wall -std=c++17 pr83835.C struct Y { struct Z { virtual ~Z (); constexpr explicit Z (const Y*) { } }; Z z; constexpr Y (): z (this) { } }; pr83835.C: In constructor ‘constexpr Y::Y()’: pr83835.C:9:32: error: temporary of non-literal type ‘Y::Z’ in a constant expression constexpr Y (): z (this) { } ^ pr83835.C:2:12: note: ‘Y::Z’ is not literal because: struct Z { ^ pr83835.C:2:12: note: ‘Y::Z’ has a non-trivial destructor