C++20哪里禁止sizeof...T(不带括号)

use*_*445 5 c++ language-lawyer variadic-templates c++20 parameter-pack

sizeof...当参数没有括号时,g++ 和 clang++ 都拒绝使用。例如,以下代码被拒绝:

template<typename... T> auto packsize = sizeof...T;
Run Code Online (Sandbox Code Playgroud)
$ 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.
Run Code Online (Sandbox Code Playgroud)

CPPreference.org似乎也需要括号括起来T。然而,这样的限制并没有出现在 C++20 标准中任何明显的地方,例如sizeof... 的讨论pack 扩展的讨论。然而,标准中的所有非规范示例都包含括号。

我的问题:哪种规范语言禁止在 C++20 中使用sizeof...不带括号的标识符?

Hol*_*Cat 12

这是语法所要求的:

\n
\n

[expr.unary.general]/1

\n

一元表达式:
\n\xc2\xa0 \xc2\xa0 \xc2\xa0 ...
\n\xc2\xa0 \xc2\xa0 \xc2\xa0sizeof ... ( 标识符 )
\n\xc2\xa0 \xc2\xa0 \xc2\xa0 ...

\n
\n