【发布时间】:2011-01-11 15:18:54
【问题描述】:
假设我有以下 sn-p:
template <class T> void f(T arg) { arg(); }
void g()
{
struct { void operator()(void) { } } foo;
f(foo);
}
Visual C++ 接受这一点。但是,当我尝试 GCC 时,我得到:
$ g++ --version # just in case this matters
g++ (Debian 4.4.5-8) 4.4.5
...
$ g++ foo.cc
foo.cc: In function 'void g()':
foo.cc:7: error: no matching function for call to 'f(g()::<anonymous struct>&)'
当foo 是全局作用域并且它的类型有一个名称时,这可以工作。但是当类型是匿名 或 在 g() 中声明时,它不会。
为什么 GCC 拒绝这个?它是有效的 C++ 吗?
【问题讨论】:
标签: c++ templates anonymous-class