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\n\n一元表达式:
\n
\n\xc2\xa0 \xc2\xa0 \xc2\xa0 ...
\n\xc2\xa0 \xc2\xa0 \xc2\xa0sizeof...(标识符)
\n\xc2\xa0 \xc2\xa0 \xc2\xa0 ...