此代码无法在MSVC上编译,错误代码为C2065“'test':未声明的标识符”。
Clang编译时没有警告,GCC编译但使用-Wall
“警告:设置了变量'test'但未使用[-Wunused-but-set-variable]”警告。
在Godbolt上可以进行比较。
template <typename T>
struct foo
{
constexpr auto operator()() const
{
if constexpr (constexpr auto test = true; test)
{
return true;
}
else
{
return false;
}
}
};
int main()
{
foo<int> bar{};
bar();
return 0;
}
有很多方法可以进行编译
foo
周围的模板constexpr
test
之外分配if constexpr
constexpr auto test = true;
if constexpr (test)
此编译失败的原因是什么?