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



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...(标识符)
      ...

相关内容

  • 没有找到相关文章

最新更新