KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Note: this seems to be a repost of a problem: C++ - Overload templated class method with a partial specilization of that method I have boiled down a problem I am having with C++ template specialization down to a simple case. It consists of a simple 2-parameter template class Thing , where I would like to specialize Thing<A,B>::doSomething() for B=int . #include <cstdio> // A 3-parameter template class. template <class A, class B> class Thing { public: Thing(A a, B b) : a_(a), b_(b) {} B doSomething(); private: A a_; B b_; }; // The generic case works as expected. template <class A, class B> B Thing<A,B>::doSomething() { return b_; } // This specialization does not work! template <class A> int Thing<A,int>::doSomething() { return b_+1; } int main() { // Setup our thing. Thing<double,int> thing(1.0,2); // This doesn't compile - but works with the generic case. printf("Expecting 3, and getting %i\n", thing.doSomething()); // Clean up. return 0; } Unfortunately, g++ exits with the error: partial_specialization.cpp:30: error: invalid use of incomplete type ‘class Thing<A, int>’ partial_specialization.cpp:8: error: declaration of ‘class Thing<A, int>’ The clang++ compiler is a bit more verbose, but has the same problem: partial_specialization.cpp:30:19: error: nested name specifier 'Thing<A, int>::' for declaration does not refer into a class, class template or class template partial specialization int Thing<A,int>::doSomething() ~~~~~~~~~~~~~~^ partial_specialization.cpp:32:12: error: use of undeclared identifi
Tags (comma-separated)
Save Edits
Cancel