首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法编译简单的C++17程序

无法编译简单的C++17程序
EN

Stack Overflow用户
提问于 2019-11-03 11:39:12
回答 1查看 362关注 0票数 6

我试图使用C++17 if constexpr特性,但无法编译一个简单的函数。

代码:

代码语言:javascript
运行
复制
template <auto B>
int foo()
{
    if constexpr(B)
    {
        return 1;
    }
    else
    {
        return 2;
    }
}  // <- I get an error here 

int main()
{
    return foo<false>();
}

编译器输出的错误:

代码语言:javascript
运行
复制
<source>(12): error #1011: missing return statement at end of non-void function "foo<B>() [with B=false]"

  }

使用-std=c++17 -O3 -Wall -Werror编译器标志和icc 19.0.1编译器。

这是有效的C++17代码吗?这个错误背后的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-03 11:53:23

这是有效的C++17代码吗?

是的,是有效的。只有一条返回语句将被丢弃,而另一条将保留。即使没有保留,C++仍然允许您从函数中省略返回语句。如果达到函数的闭包大括号,则会得到未定义的行为,但只有在执行达到此点时才会出现这种情况。

在您的情况下,执行不能达到这样的点,所以UB是不可能的。

这个错误背后的原因是什么?

您使用了-Werror,从而将编译器的错误正警告转换为一个严重错误。解决方法之一是在特定函数周围禁用此警告。这纯粹是一个执行质量问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58679786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档