This is my code
#include <vector>
template <typename T, template<typename> class C = std::vector >
struct FooBar
{
/*codez*/
};
template<typename T>
struct Global{};
int main()
{
struct Local{};
FooBar<Local,Global> k;
}
This is the error that I get
template argument for ‘template<class T, template<class> class C> struct FooBar’ uses local type ‘main()::Local’
Which part of the standard says that this is wrong? I am using gcc 4.5.1. How can make this code work?
Which part of the standard says that this is wrong?
That would be §14.3.1/2 from the 2003 C++ Standard:
A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
How can make this code work?
Don't use a local type as a template argument.
Note that this restriction has been lifted in C++11, so using that language standard you are able to use a local type as a template argument.
14.3.1/2
A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
Try compiling your code with -std=c++0x
option (gcc 4.5.1). C++0x lifts the restriction and so you can use a local type as template argument.
精彩评论