Visual c++ 2015在使用decltype(auto)时给出C4552警告
Visual C++ 2015 gives C4552 warning when used decltype( auto )
我想我在Visual c++ 2015中遇到了一个bug,但我想确定一下。考虑一下这个片段:
template < typename T >
decltype( auto ) f( T param )
{
return param + 1;
}
int main()
{
auto i = f( 10 );
return 0;
}
Visual c++ 2015对返回语句给出如下警告:
警告C4552: '+':运算符无效;预期的有副作用的操作符
,尽管它似乎对生成的代码没有任何影响。这是一个编译器错误吗?
这似乎是一个bug。这里有一个开放的bug报告:
https://connect.microsoft.com/VisualStudio/feedback/details/1468881/decltype-auto-causes-unnecessary-warnings在Csq的回答中已经指出,观察到的行为有一个未决的Microsoft Connect报告。这个问题还没有得到评估。
要解决1)的问题,您可以在表达式周围包含括号:
template < typename T >
decltype( auto ) f( T param )
{
return ( param + 1 );
}
1)使用Visual Studio 2015 Community Edition验证
正如微软自己在这里所说的,这可能是"错误"。试一试:
decltype(auto) f(T param)
{
return (param + 1);
}
或者干脆停止这场战争,因为微软可能不会因为他们的"错误"借口而修复它。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- 禁止显示由于常量为零而比较始终为假的警告
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- Visual c++ 2015在使用decltype(auto)时给出C4552警告