使用 constexpr-if 时出错:'constexpr'之前的预期'('

Errors when using constexpr-if: expected '(' before 'constexpr'

本文关键字:constexpr constexpr-if 使用 出错      更新时间:2023-10-16

我试图使用if constexpr来检查某些内容,但我遇到了类似的错误

在'constexpr'之前应为"(">

没有前一个"if"的"else";

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

我的编译标志是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>;
}

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