2017-05-22 6 views
1

は私がgcc7.1を使用してコードをコンパイルしますが、いくつかのコンパイルエラーました:"constexpr if"はエイリアスを使用していますか?

エラー:予想される修飾されていない-IDの前には '他'

class Test 
{ 
    int a{1}; 
    string b{"test"}; 
    public: 
      template <int N> auto & get() 
      { 
      if constexpr (N==0) 
       return a; 
      else 
       return b; 
      } 
}; 

namespace std { 
    template<> struct tuple_size<Test> { static const int value = 2; }; 
    template<size_t N> struct tuple_element<N, Test> 
    { 
     if constexpr (N==0) //error: expected unqualified-id before ‘if’ 
      using type = int; 
     else     //error: expected unqualified-id before ‘else’ 
      using type = string; 
     //using type = conditional_t<N==0, int, string>; //this works 
    }; 
} 
:前に期待修飾されていないIDを

エラー 'が'

+1

これを有効にしたが、委員会によって却下された2013年頃には、「静的な」提案が2件ありました。 – TemplateRex

答えて

3

constexpr ifステートメントはまだifステートメントであり、ifステートメントを使用できるコンテキストでのみ表示されます。

これには、クラス(テンプレート)の定義は含まれていません。

+0

@tcありがとう! – camino

+1

この目的のために 'std :: enable_if'または' std :: conditional'を使うことをお勧めします – Zereges

関連する問題