https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83796
Bug ID: 83796
Summary: Abstract classes allowed to be instantiated when
initialised as default parameter to function or
constructor
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: johnsonmichaelgraham at gmail dot com
Target Milestone: ---
Test Case:
class MyAbstractClass
{
public:
virtual int foo() const = 0;
};
class TestClass
{
public:
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;
std::cout << testInstance.value_ << std::endl;
std::cout << TestFunction() << std::endl;
return 0;
}
// Compiles OK
runtime output:
pure virtual method called
terminate called without an active exception