質問
以下のソースコードで、コンパイルエラーが発生します。
なにが問題なのか分からないのですが、エラーの原因を教えてください。
…バグですか?
C++
1template <class... Args> 2struct vbase { 3 template <class T> 4 vbase(T &&another); 5 6 virtual ~vbase(); 7}; 8 9struct derived1 : virtual vbase<int, double> { 10 using base = vbase<int, double>; 11 using base::base; 12}; 13 14struct derived2 : derived1 { 15 using derived1::derived1; 16}; 17 18int main() { 19 derived2{0}; 20}
エラーメッセージ
(ファイル名) (ファイル名)(21): error C2512: 'vbase<int,double>::vbase': クラス、構造体、共用体に既定のコンストラクターがありません。 (ファイル名)(19): note: コンパイル対象の関数 テンプレート インスタンス化 'derived2::derived2<int>(int &&)' のリファレンスを確認してください
環境
Visual Studio 2019
Windows 10
コンパイルオプション: /std:c++17
試したこと
以下のいずれかを行うと、上記のコンパイルエラーは発生しなくなります。(定義がないので、リンクエラーは発生しますが。)
- GCC でコンパイルする
- Clang でコンパイルする
- virtual を削除
- vbase のテンプレートパラメータを単に削除して、テンプレートクラスではなく、普通のクラスにする
- derived2{0} ではなく derived1{0} とする
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/17 17:20
2021/10/17 17:38
2021/10/18 05:01