In C++ what does template<> mean?
It is a template specialization. The typical case would be partial specialization:
#include <iostream>
template<class T1, class T2>
struct foo
{
void doStuff() { std::cout << "generic foo "; }
};
template<class T1>
struct foo<T1, int>
{
void doStuff() { std::cout << "specific foo with T2=int"; }
};
As you can see, the specialization removes one element from the template parameters and explicitly states a type instead of the removed one. That means if there is only one template type, the <>
just become empty:
template<class T1>
struct bar
{
void doStuff() { std::cout << "generic bar"; }
};
template<>
struct bar<int>
{
void doStuff() { std::cout << "specific bar with T1=int"; }
};
You might just say it is just the required syntax.
The normal syntax would be template< typename T > struct Allowed
;
Because we know that in this case T is std::string there is nothing to put inside the angled brackets but the word template and the angled brackets are still required because writing
struct Allowed<std::string>
on its own would not imply that you are specializing the template but simply that you are instantiating one with std::string as the type. (The word "struct" is not necessary to do that but is still permitted).
It's a specialization. template<>
means that the specialization itself is not templated- i.e., it is an explicit specialization, not a partial specialization.