https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83796
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Known to work| |4.7.2 Keywords|diagnostic | Last reconfirmed| |2018-01-12 CC| |jason at gcc dot gnu.org Ever confirmed|0 |1 Summary|Abstract classes allowed to |[6/7/8 Regression] Abstract |be instantiated when |classes allowed to be |initialised as default |instantiated when |parameter to function or |initialised as default |constructor |parameter to function or | |constructor Known to fail| |4.7.3, 4.8.4, 4.9.3, 5.4.0, | |6.3.0, 7.2.0, 8.0 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- r194820 is a likely candidate, thanks. Valid testcase (the one above doesn't compile) which calls a pure virtual at runtime when compiled with G++ or EDG: struct MyAbstractClass { virtual int foo() const = 0; }; struct TestClass { TestClass(const MyAbstractClass& m = {}) // should generate compiler error : value_(m.foo()) {} int value_; }; int TestFunction(const MyAbstractClass& m = {}) // should generate compiler error { return m.foo(); } int main(int argc, char *argv[]) { TestClass testInstance; TestFunction(); }