g++和clang++都拒绝在参数没有括号的情况下使用sizeof...
。例如,以下代码被拒绝:
template<typename... T> auto packsize = sizeof...T;
$ g++ -std=c++20 -ggdb -O -Wall -Werror -c -o z.o z.cc
z.cc:1:50: error: 'sizeof...' argument must be surrounded by parentheses [-fpermissive]
1 | template<typename... T> auto packsize = sizeof...T;
| ^
$ clang++ -std=c++20 -ggdb -O -Wall -Werror -c -o z.o z.cc
z.cc:1:50: error: missing parentheses around the size of parameter pack 'T'
template<typename... T> auto packsize = sizeof...T;
^
()
1 error generated.
CPPreference.org似乎也需要在T
周围加上括号。然而,这样的限制并没有出现在c++ 20标准中任何明显的地方,例如,对sizeof…或者是关于包扩展的讨论。但是,标准中的所有非规范示例都包含括号。
我的问题:什么规范语言禁止在c++ 20中使用sizeof...
与无括号标识符?
这是语法所要求的:
[expr.unary.general]/1
一元表达式:
…sizeof
...
(
标识符)
...