내가 컴파일되지 않은 몇 가지 코드에 대한 몇 가지 테스트를하고 있었다을에서 작동하고,이 코드 발견 :에 (암시 삭제 기본 생성자는 C++ 14
struct A {
A(int) {};
virtual void foo() = 0;
};
struct B : public virtual A {
virtual void bar() = 0;
};
struct C : public B {
C() : A(1) {}
virtual void foo() override {}
virtual void bar() override {}
};
int main() {
C c;
return 0;
}
C++ 11에서 컴파일 실패 g ++ 7.0.1)에서 ‘B::B()’ is implicitly deleted because the default definition would be ill-formed
으로, C++에서는 14가 성공적으로 컴파일됩니다.
나는이 C++ 14의 새로운 기능이 작동하도록 허용했는지 찾아 보려고 노력했지만 아무런 효과가 없습니다. cppreference에있는 description은 보이는 것 중 아무 것도 언급하지 않습니다.
이 코드는 C++ 14에서는 컴파일 할 수 있지만 C++ 11에서는 컴파일 할 수없는 이유는 무엇입니까?
Clang의 C++ 11 (및 C++ 03) 모드에서 작동합니다. GCC의 버그일까요? –
@JosephThomson 나는 Clang에서 그것을 테스트하지 않았다는 것을 인정했다. 실제로 C++ 03 모드에서'g ++ '에서도 작동합니다. 그래서 어쩌면 나는 버그 보고서를 열어야 만한다. – Svalorzen
누군가가 당신의 질문에 대한 답을 줄 수 있을지에 달려있다! –