KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
What is the reason for the second brackets <> in the following function template: template<> void doh::operator()<>(int i) This came up in SO question where it was suggested that there are brackets missing after operator() , however I could not find the explanation. I understand the meaning if it was a type specialization (full specialization) of the form: template< typename A > struct AA {}; template<> struct AA<int> {}; // hope this is correct, specialize for int However for function templates: template< typename A > void f( A ); template< typename A > void f( A* ); // overload of the above for pointers template<> void f<int>(int); // full specialization for int Where does this fit into this scenarion?: template<> void doh::operator()<>(bool b) {} Example code that seems to work and does not give any warnings/error (gcc 3.3.3 used): #include <iostream> using namespace std; struct doh { void operator()(bool b) { cout << "operator()(bool b)" << endl; } template< typename T > void operator()(T t) { cout << "template <typename T> void operator()(T t)" << endl; } }; // note can't specialize inline, have to declare outside of the class body template<> void doh::operator()(int i) { cout << "template <> void operator()(int i)" << endl; } template<> void doh::operator()(bool b) { cout << "template <> void operator()(bool b)" << endl; } int main() { doh d; int i; bool b; d(b); d(i); } Output: operator()(bool b) template
Tags (comma-separated)
Save Edits
Cancel