#include <iostream>
class A
{
public:
virtual ~A() = default;
virtual void foo() const = 0;
};
class C
{
public:
C(const A &a) : m_a(a) {}
void bar() const
{
std::cout << "in" << std::endl;
m_a.foo(); //pure virtual method called terminate called without an active exception
std::cout << "done" << std::endl;
}
private:
const A &m_a;
};
int main()
{
C c({});
c.bar();
}
приводит к:
$ g++ virtual_crash.cpp
$ ./a.out
in
pure virtual method called
terminate called without an active exception
Aborted (core dumped)
Мой вопрос заключается в том, почему это работает с g cc?
В C c({});
построить абстрактную A ( ГБД прослеживается). Явное создание этого объекта явно ошибочно. VS2017 дает сбой по той же причине ..