Why can't a struct defined inside a function be used as functor to std::for_each?

大兔子大兔子 提交于 2019-12-05 04:28:16

std::for_each is a function template; one of the template parameters is the type of the function argument.

You cannot use a local type as a template argument. It's just a restriction currently in the language. In the forthcoming revision of C++, C++0x, this restriction is removed, so you can use local types as template arguments.

Visual C++ 2010 already supports the use of local classes as template arguments; support in other compilers may vary. I'd guess that any compiler that supports C++0x lambdas would also support the use of local classes as template arguments (this may not be entirely true, but it would make sense).

I get a different error when I try to compile your code:

error: 'flip_all(__gnu_debug_def::map, std::allocator > >)::FlipFunctor' uses local type 'flip_all(__gnu_debug_def::map, std::allocator > >)::FlipFunctor'

That's actually to be expected, because a function local type (such as your FlipFunctor here) has internal linkage, and a template type must have external linkage. Since the third parameter of std::for_each is a template, you cannot pass something of a function local type to it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!