asv*_*kau 4 c++ templates anonymous-class
假设我有以下代码段:
template <class T> void f(T arg) { arg(); }
void g()
{
struct { void operator()(void) { } } foo;
f(foo);
}
Run Code Online (Sandbox Code Playgroud)
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>&)'
Run Code Online (Sandbox Code Playgroud)
当foo
全局作用域并且其类型具有名称时,这是有效的.但是当类型是匿名的或在内部声明时g()
它不会.
为什么GCC拒绝这个?它是有效的C++吗?
14.3.1第2段:
本地类型,没有链接的类型,未命名的类型或从这些类型中的任何类型复合的类型不应用作模板类型参数的模板参数.
换句话说,无效.虽然它会很方便,但这可能是VC允许它的原因.
归档时间: |
|
查看次数: |
1326 次 |
最近记录: |