2016-04-15 1 views
8

は、次の簡単なコードが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は私を受け入れ何の問題もありません。

これは私にとって明らかなバグです(つまり、標準ではサポートされていないという意味です)。他のビュー?

+0

ほんの少ししか関係ありません:私はVS2015のUPD2でそれほど印象的ではありません。それは、そのスチームパイルの結果として、仕事を壊してしまったすべてのものではありませんでした。関連性:clangはこれも問題なく食べる。 – WhozCraig

+1

これは二相検索がないためだと思いますか?ああ私は冗談を言っている私は分かりません。私はずっと前に_real_蒸しパイル(すなわちC++)の開発に従った。 –

+1

私にバグのように見えます。回避策に興味がある場合は、 'template Foo(Arg、Args ...);'これは、テンプレート化されたコンストラクタが確実に行うためのより簡単な方法です少なくとも1つの議論。 –

答えて

4

これはVS 2015 Update 2のバグです。すでにバグを修正しています(202164、これは内部バグ番号です)。このコードはUpdate 3ビルドでも動作します。

+1

自分自身で検証することに興味があれば、私たち(MS C++コンパイラチーム)はhttp://webcompiler.cloudapp.net/に内部コンパイラビルドを組み込み、ブラウザでこれをテストすることができます。 – Rastaban

+1

バグに関するもう少し情報を提供できますか?実際にバグは何ですか?そうすれば、このページの訪問者は、似ているがわずかに異なる問題で、あなたのバグ修正が_them_のためにそれを並べ替えるかどうかを知ることができます。 –