を使用している場合:Visual StudioのC2580次のコードの場合、デフォルトのキーワード
エラーC2580 'S :: S(無効)':複数のバージョンの
struct S { S() = default; S(S const&) = default; S(S&&) = default; S& operator=(S const& other) = default; S& operator=(S&&) = default; template <typename... T> S(T&&... params) { } }; int main() { S s; return 0; }
私はエラーメッセージが表示されますデフォルトの特別 メンバー機能は許可されていません
私は分かりません。私は、エラーがテンプレートのコンストラクタによって(検証し、コメントアウトしてプログラムをコンパイルしている)原因と考えています。
を私は 'S(S &&);は'カスタム実装を持っている必要がありますねこれは渡されるパラメータのメモリ領域(すなわちデータ)を盗み出す関数であるため、それ以外の場合は 'S(S const&);と同じになります'同じことが 'operator =' – sameerkn
に当てはまります実際にこれをあなたのコンパイルエラーのポイントまで実行する 'main()'は、この質問をかなり頑強にします。おそらく質問を更新してください。 – WhozCraig
あなたのテンプレートコンストラクタは、あなたのdefaコンパイラはあなたが何をしたいのか分からないからです。これは、デフォルトコンストラクタ、コピーコンストラクタ、または移動コンストラクタです。あなたはそれがデフォルトであると言いましたが、カスタム実装も提供しています。 – xaxxon