假设我有以下片段:
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>&)'
When foo
作用域是全局的,并且它的类型有一个名称,这是可行的。但是当类型是匿名或内部声明时g()
它不是。
为什么海湾合作委员会拒绝这样做?它是有效的 C++ 吗?
14.3.1 第 2 段:
本地类型、无链接的类型、未命名类型或类型
由任何这些类型合成的化合物不得用作
模板类型参数的 templateargument。
换句话说,无效。虽然这在我看来很方便,但这也许就是 VC 允许它的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)