无法编译简单的C++17程序
Unable to compile a simple C++17 program
我正在尝试使用C++17if constexpr
功能,但未能编译一个简单的函数。
代码:
template <auto B>
int foo()
{
if constexpr(B)
{
return 1;
}
else
{
return 2;
}
} // <- I get an error here
int main()
{
return foo<false>();
}
编译器输出的错误:
<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代码吗?这个错误背后的原因是什么?
这是有效的C++17代码吗?
是的,它是有效的。正好一个返回语句将被丢弃,而另一个将保留。即使没有剩余,C++仍然允许您从函数中省略return语句。如果达到函数的右大括号,则会得到未定义的行为,但只有当执行达到该点时,这才有风险。
在您的情况下,执行无法达到这样的点,因此UB是不可能的。
这个错误背后的原因是什么?
您使用了-Werror
,从而将编译器的误报警告转化为硬错误。一种解决方法是禁用该特定功能的警告。这纯粹是一个实施质量问题。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在c++17中制作一个模板包装器/装饰器
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 需要有关使用 Visual Studio 17 将 QT 桌面应用程序打包为 AppX 格式的指导
- 无法编译简单的C++17程序
- 当我读取一个大小为 17 mb 的 100 万个 url 文件时,我的程序占用大小为 163 MB
- 如何在多线程 c++ 17 程序中交换两个指针
- 为什么这个C++程序不适用于 17 13 3 5