我試圖用G ++ 4.9.0編譯下面簡單的代碼:爲什麼我不能繼承虛擬基礎的構造函數?
struct A {
explicit A(int x) { }
};
struct B : public virtual A {
using A::A;
};
int main(int argc, char** argv) {
B b(0);
return 0;
}
,但我得到了以下錯誤:
$ g++ -std=c++11 main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:10:10: error: use of deleted function ‘B::B(int)’
B b(0);
^
main.cpp:6:14: note: ‘B::B(int)’ is implicitly deleted because the default definition would be ill-formed:
using A::A;
^
main.cpp:6:14: error: no matching function for call to ‘A::A()’
main.cpp:6:14: note: candidates are:
main.cpp:2:14: note: A::A(int)
explicit A(int x) { }
^
main.cpp:2:14: note: candidate expects 1 argument, 0 provided
main.cpp:1:8: note: constexpr A::A(const A&)
struct A {
^
main.cpp:1:8: note: candidate expects 1 argument, 0 provided
main.cpp:1:8: note: constexpr A::A(A&&)
main.cpp:1:8: note: candidate expects 1 argument, 0 provided
難道我做錯了什麼?這是一個編譯器錯誤?
hm,[clang compiles it](http://coliru.stacked-crooked.com/a/24e4b21aeab3cf4d),而不是gcc – quantdev 2014-09-03 21:07:31
這是GCC錯誤[58751](https://gcc.gnu.org/bugzilla /show_bug.cgi?id=58751)。 – 2014-09-03 21:09:50
SO關聯有(實際上是gcc文件報告的來源):http://stackoverflow.com/questions/19399644/inheriting-constructors-and-virtual-base-class – quantdev 2014-09-03 21:15:11