2017-04-06 21 views
0

との条件付きでのstd ::条件のようですが、定義されていないクラスに対してコンパイル時のエラーなし、のstd :: enable_if_and_elseのようなものを作成することも可能です。ここでのstd :: SFINAE

例です。

static constexpr bool myExpr = true; 

struct A {}; 
struct B; 

struct C : 
    std::conditional<myExpr, 
     A, 
     B>::type 
    {}; // Compilation error: B is declared but not defined 

struct D : 
    enable_if_else<myExpr, 
     A, 
     B>::type 
    {}; // It works 

おかげ

+1

は' 'true'を可能myExpr'ないでしょうか? – Quentin

+0

はい、コピーと貼り付けが間違っています。あなたが正しい。おかげ – user3770392

+1

いずれの場合においても、[Iがエラーを再現できない(http://coliru.stacked-crooked.com/a/5ce6197045347aed)。どのコンパイラを使用していますか? – Quentin

答えて

3

は、STDのようなものを作成することが可能です:: STDようenable_if_and_else、::条件が、そのクラスのコンパイル時のエラーなし定義されていません。あなたが完全であることを、それを必要とする方法でBを使用していないのでBは、不完全な場合

そこはstd::conditional<true, A, B>::typeのためのすべてのエラーはいけません。

だからstd::conditionalあなたが探しているもの、すでにあります。それは `A`ブランチを取るよう

+0

はい、あなたは正しいです。私が扱っていたコードは違っていますが、私はちょうどベースケースに減らそうとしましたが、いくつかの違いがあります。私は質問を編集します。これを指摘してくれてありがとうございました – user3770392

+0

ok私は自分のコードで何が問題であるかを見つけました。私は多くの方法でstd :: conditionalをテストしました。あなたは完全に正しいです。ありがとうございました – user3770392

関連する問題