“constexpr if”不支持别名使用?

时间:2017-05-22 17:15:14

标签: c++ c++17

我使用gcc7.1编译代码,但得到了一些编译错误:

错误:在'if'

之前预期的unqualified-id

错误:在'else'之前预期的unqualified-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
    };
}

1 个答案:

答案 0 :(得分:3)

constexpr if语句仍然是if语句,只能出现在可以使用if语句的上下文中。

这不包括类(模板)定义。