2017-02-21 5 views
0

テストプログラムはVS2015でコンパイルされますが、VS2017 RCではコンパイルされません。私は、最新のVisual Studioは、以前のバージョンはそれで問題がないながら、コードをコンパイルするために失敗した理由を知りたいのですVariadicテンプレートパックの展開はVS2017 RCで失敗しますがVS2015では発生しません

/* main.cpp */ 
#include <type_traits> 

template <typename T> 
struct A_impl 
{ 
    using type = std::false_type; 
}; 

template <typename T> 
using A = typename A_impl<T>::type; 

template <bool... B> 
struct logic_helper; 

template <bool... B> 
using none_t = std::is_same<logic_helper<B...>, logic_helper<(B && false)...>>; 

template <typename... C> 
struct Foo 
{ 
    // Compile error: 
    // error C3520: 'C': parameter pack must be expanded in this context 
    using FooType = none_t<A<C>::value...>; 
}; 

int main() 
{ 
    Foo<int, int, int> foo; 
    return 0; 
} 

:以下はVS2017 RCでテストプログラムをコンパイルしている間、私は取得していますエラーです。可能であれば、VS2017 RCのこのコンパイルエラーに対する解決策はありますか?

+0

[接続](http://connect.microsoft上の問題をファイル。 com/VisualStudio)を参照してください。 –

+0

あなたは[Visual Studio 2017の最新バージョンを実行していますか](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes#feb7) – PaulMcKenzie

+0

昨日VS2017をインストールしたので、私はそう信じています。 – mtkzcs

答えて

0

私は、問題の回避策を見つけましたが、コンパイラは私の最初のアプローチで文句を言う、なぜ私はまだ理解することはできません。

template <typename... C> 
struct Foo 
{ 
    // Workaround 
    using FooType2 = logic_helper<A<C>::value...>; 
    using FooType3 = logic_helper<(A<C>::value && false)...>; 
    using FooType4 = std::is_same<FooType2, FooType3>; 
}; 
関連する問題