Visual c++ 2015在使用decltype(auto)时给出C4552警告

Visual C++ 2015 gives C4552 warning when used decltype( auto )

本文关键字:警告 C4552 auto 2015 c++ decltype Visual      更新时间:2023-10-16

我想我在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);
}

或者干脆停止这场战争,因为微软可能不会因为他们的"错误"借口而修复它。