【发布时间】:2011-04-21 22:21:08
【问题描述】:
我有以下代码,它使用 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)一样吗?
干杯
【问题讨论】:
-
我显然遗漏了一些东西......按喇叭,另一位用户认为有必要指出 C++ 不是 Python - 但为什么呢?这段代码在我看来完全不像 Python。
-
@delnan 在 Python 中额外的括号有特定的含义,但在 C++ 中则没有。笑话在需要解释的时候就不再好笑了。
-
@Mark:如果是基于错误信息的玩笑也不好笑。你们不知道任何Python吗?现在,
(expr,)将是一个单例元组,但(expr)只是expr。在 Python 中,简单地将某些东西包装在括号中并不会改变它的任何内容,就像在每一种理智的语言中一样。 -
@Mark,@delnan,你是对的,下午晚些时候的brainfart。
-
如果第二个 struct foo 是一个特化,那么模板行不应该是
template <>吗?
标签: c++