Per*_*-lk 2 c++ scope constexpr c++17
这是不正确的还是只是编译器(在我的情况下是g ++ - 7)仍然是错误的?因为它说n没有定义.
template<class T>
auto tup(T const& t)
{
if constexpr(hana::length(t)() % 2)
auto n = hana::append(t, nullptr);
else
auto const& n = t;
return n;
}
int main()
{
std::cout << hana::length(tup(std::tuple(3, "h", 'c'))) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
n 将始终定义,无论编译器将进入哪个分支.
您的程序格式不正确,因为每个程序n都限制在声明它的单个语句的范围内.
C++ 17草案N4659 [stmt.select]/1说:
在该子语句选择语句(每个子语句,在
else所述的形式if语句)隐式地定义的块范围([basic.scope]).如果selection-statement中的子语句是单个语句而不是复合语句,则就好像它被重写为包含原始子语句的复合语句一样.[ 例如:
if (x)
int i;
Run Code Online (Sandbox Code Playgroud)
可以等同地重写为
if (x) {
int i;
}
Run Code Online (Sandbox Code Playgroud)
因此在
if声明之后,i不再在范围内.- 结束例子 ]
此规则适用于所有for,while,switch和if条语句-无论是否constexpr关键字使用if.
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |