C++ 为什么使用C++;17`constexpr if`在MSVC上编译失败?

C++ 为什么使用C++;17`constexpr if`在MSVC上编译失败?,c++,visual-c++,compiler-errors,language-lawyer,C++,Visual C++,Compiler Errors,Language Lawyer,此代码无法在MSVC上编译,错误为C2065“'test':未声明的标识符”。 Clang编译时没有警告,GCC编译时使用-Wall“警告:变量'test'设置但未使用[-Wunused但设置变量]”发出警告。 有关比较,请访问 模板 结构foo { constexpr自动运算符()()const { 如果constexpr(constexpr自动测试=真;测试) { 返回true; } 其他的 { 返回false; } } }; int main() { 福巴{}; bar(); 返回0; }

此代码无法在MSVC上编译,错误为C2065“'test':未声明的标识符”。 Clang编译时没有警告,GCC编译时使用
-Wall
“警告:变量'test'设置但未使用[-Wunused但设置变量]”发出警告。 有关比较,请访问

模板
结构foo
{
constexpr自动运算符()()const
{
如果constexpr(constexpr自动测试=真;测试)
{
返回true;
}
其他的
{
返回false;
}
}
};
int main()
{
福巴{};
bar();
返回0;
}
有很多方法可以使这个程序编译

  • 删除
    foo周围的模板
  • 删除
    constexpr
  • 如果constexpr
    constexpr自动测试=true;
    if constexpr(测试)
    

  • 编译失败的原因是什么?

    这只是MSVC和GCC的一个bug

    MSVC已经有了一个解决方案

    对于GCC,它可能与和有关