无法消除警告 C4554

Die*_*ter 5 c++ visual-c++ c++11 visual-studio-2015

在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)

小智 4

你可以试试这个:

constexpr std::size_t calc_size(int param)
{
    return 2 << (param - 1);
}

template<int C>
void F(std::array<int, calc_size(C)> const&) // 2 << (2-1) = 4
{
} 
Run Code Online (Sandbox Code Playgroud)