2017-05-22 2 views
1

ich kompilieren den Code gcc7.1 verwenden, aber einige Compiler-Fehler bekam:"constexpr if" unterstützt keine Alias-Verwendung?

Fehler: erwartet unqualifizierte-ID vor 'wenn'

Fehler: erwartet unqualifizierte-ID vor 'else'

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 
    }; 
} 
+1

Es gab zwei "statische if" Vorschläge um 2013, die dies ermöglicht hätten, die aber vom Ausschuss abgelehnt wurden. – TemplateRex

Antwort

3

Eine Anweisung constexpr if ist immer noch eine if-Anweisung und kann nur in Kontexten auftreten, in denen eine if-Anweisung verwendet werden kann.

Dies beinhaltet keine Klassen- (Vorlagen-) Definitionen.

+0

@tc Vielen Dank! – camino

+1

Ich würde vorschlagen, zu diesem Zweck 'std :: enable_if' oder' std :: conditional' zu verwenden – Zereges

Verwandte Themen