スコープのは、私は次のコードを持っているとしましょう:これを受け入れる++は、関数内
template <class T> void f(T arg) { arg(); }
void g()
{
struct { void operator()(void) { } } foo;
f(foo);
}
のVisual C。私はGCCをしようとするときしかし、私が取得:
foo
がグローバルスコープされ、その種類は名前を持っている
$ 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>&)'
、これは動作します。しかし、タイプが匿名の場合またはの中にg()
と宣言されていません。
なぜGCCはこれを拒否しますか?それは有効なC + +ですか?
これは、例えばC++でのクロージャの欠如に対する実行可能な代替手段でした。 –
このような簡単な答えをありがとう。私にとっては、この使用法は言語の "精神"に適合しているようですが、なぜこれが実装者にいくつかの手間を省くためにスコープされたのかも知れません。 – asveikau
。それは本当にそこに属していない単なる関数で一度使用される構造体でグローバルまたは他の名前空間を乱雑にすることです。 – stijn