我有以下代码,它使用 gcc 4.4 编译,没有警告,并返回 42。
template<typename T>
struct foo
{ };
template<typename T>
struct foo<void (T)>
{
enum { value = 42 };
};
int main()
{
return foo<void ((int))>::value;
}
现在,我明白了为什么当模板参数是 void (int)
时它应该起作用,但是双括号有什么用呢?这在 C++ 中合法吗?它与 void (int)
相同吗?
干杯
最佳答案
在这种情况下,void ((int))
与 void (int)
相同.
void ((int))
参与foo<void ((int))>
叫做type-id
.
根据 §8.1/1,type-id
由...组成
type-specifier-seq
和 abstract-declarator
.
在 void ((int))
, type-specifier-seq
是void
和 abstract-declarator
是((int))
,
和 abstract-declarator
可以任意括号。
这在 C 和 C++ 中是合法的。
关于c++ - 函数参数列表周围的双括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750396/