微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么使用“constexpr”会在代码块中给出主要表达式错误

如何解决为什么使用“constexpr”会在代码块中给出主要表达式错误

我只在代码块中的 constexpr 之前得到预期的主要表达式。有没有办法来解决这个问题?这是我要测试的代码。我已将 c++ 17 设置为编译器。我正在使用 GNU GCC 编译器。 GCC (MinGW.org GCC-6.3.0-1) 6.3.0。我在 Visual Studio 中没有收到此错误

#include <iostream>
#include <vector>

template<class T>
void testType(std::vector<T> &x)
{
    if constexpr (std::is_same_v<T,std::string>)
    {
        //push string
        std::cout<<"String\n";
    }
    else if constexpr (std::is_same_v<T,int>)
    {
        //push integer
        std::cout<<"int\n";
    }
}
int main()
{
    
    std::vector<std::string> x;
    
    testType(x);

    return 0;
}

这是我得到的错误

error: expected primary-expression before 'constexpr'
error: expected ')' before 'constexpr'

解决方法

您的 GCC 版本不支持 if constexpr。版本 7 中添加了支持。

可以查询支持哪些C++17特性on the GCC website;与此问题相关的行是“constexpr if”。在支持每个特性的第一个版本的列中有很多“7”——甚至一个“8”,所以你应该期待 C++17 支持在版本 6 系列的编译器中参差不齐(例如您的 6.3.0)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。