Use*_*645 0 c++ if-statement undeclared-identifier constexpr
template<typename T>
T f() {
if constexpr (std::is_same<T, int>::value) {
T t = 10;
}else {
T t;
}
return t;
}
Run Code Online (Sandbox Code Playgroud)
我对上述代码的理解f是
int t = 10;
return t;
Run Code Online (Sandbox Code Playgroud)
或者
T t = // some default value for T
return t;
Run Code Online (Sandbox Code Playgroud)
取决于T. 在两者中都会有一个名为 的标识符t。为什么编译器仍然抱怨use of undeclared identifier 't'?。
编译器在解析constexpr语句之前是否检查未声明的标识符?
我对上面代码的理解是 f 的主体要么是
Run Code Online (Sandbox Code Playgroud)int t = 10; return t;或者
Run Code Online (Sandbox Code Playgroud)T t = // some default value for T return t;
不。一个更有效的比较是,对于true分支来说,它要么是:
{
int t = 10;
} // end of scope for 't'
return t; //
Run Code Online (Sandbox Code Playgroud)
或者,对于else分支:
{
T t;
} // end of scope for 't'
return t;
Run Code Online (Sandbox Code Playgroud)
这意味着treturn 语句中的 指的是不存在的实体(在该范围内)。