Допустим, у меня есть следующий фрагмент:
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 ++?