は、次の簡単なコードがnewest Visual Studio compiler(MSVC 2015アップデート2)でエラーが生成:C++不履行特別なメンバ関数の複数のバージョン - エラーMSVC 2015年
struct Foo
{
template<typename ... Args, typename = std::enable_if_t<sizeof...(Args) != 0> >
Foo(Args ...) {}
Foo() = default; // error
//Foo() {} //this works!
};
エラーメッセージが
ありますエラーC2580: 'フー:: Fooの(空)':デフォルトした特別なメンバ関数の複数のバージョンが許可されていない
gccは私を受け入れ何の問題もありません。
これは私にとって明らかなバグです(つまり、標準ではサポートされていないという意味です)。他のビュー?
ほんの少ししか関係ありません:私はVS2015のUPD2でそれほど印象的ではありません。それは、そのスチームパイルの結果として、仕事を壊してしまったすべてのものではありませんでした。関連性:clangはこれも問題なく食べる。 – WhozCraig
これは二相検索がないためだと思いますか?ああ私は冗談を言っている私は分かりません。私はずっと前に_real_蒸しパイル(すなわちC++)の開発に従った。 –
私にバグのように見えます。回避策に興味がある場合は、 'template Foo(Arg、Args ...);'これは、テンプレート化されたコンストラクタが確実に行うためのより簡単な方法です少なくとも1つの議論。 –