使用constexpr-if时发生错误:预期的'('在'constexpr'之前

时间:2018-07-11 17:53:27

标签: c++ c++17 if-constexpr

我正在尝试使用if-constexpr进行检查,但是遇到类似错误

  

期望'('在'constexpr'之前

     

'else',而前面没有'if'“

到目前为止,我检查我的代码没有问题

  

我的编译标志是g ++ -std = c ++ 17 main.cpp

#include <iostream>
template<typename T, typename Comp = std::less<T> >
struct Facility
{
template<T ... list>
struct List
{
    static void print()
    {
        std::cout<<"\""<<"Empty List"<<"\""<<"\n";
    }
};
template<T head,T ... list>
struct List<head,list...>
{
    static void print()
    {
        std::cout<<"\"" << head;
        ((std::cout << " " << list), ...);
        std::cout<<"\""<<"\n";
    }
};
template<unsigned N,typename AA>
struct RemoveFirst{};

template<unsigned N,T head,T ... Rest>
struct RemoveFirst<N,List<head,Rest...>>
{
    struct result
    {
        static void print()
        {   
            if constexpr (N == head)
            {
                std::cout<<"";
            }
            else
            {
                std::cout<<"\""<<head;
                ((std::cout << " " << Rest), ...);
                std::cout<<"\""<<"\n";
            }
        }
    };
 };
};
template<int ... intlist>
using IntList = typename Facility<int>::List<intlist...>;

int main()
{
 using IntFacility = Facility<int>;
 using List = IntList<2, 8, 2, 3, 5, 10, 8, 5>;
}

1 个答案:

答案 0 :(得分:8)

不支持C ++ 17最终版本的较旧版本的GCC(最高6.x)会给出该错误,因为它们将constexpr识别为关键字,但不理解constexpr-if构造。确保您的GCC是版本7或更高版本。