在Visual Studio 2015中编译时,此代码始终会产生 C4554 警告。但是,g++(在 Coliru 上)编译它时不会发出警告。警告消息是:
警告 C4554:“<<”:检查运算符优先级是否存在可能的错误;使用括号来阐明优先级
据此,运算符-优先于运算符<<。所以甚至不需要括号。(省略它们会产生相同的警告。)有人可以告诉我此警告的原因,或者如何消除它吗?
#include <array>
template<int C>
void F(std::array<int, 2 << (C-1)> const&) // 2 << (2-1) = 4
{
}
int main()
{
std::array<int,4> arr;
F<2>(arr);
}
Run Code Online (Sandbox Code Playgroud)