
Yes, in fact after I found no answers in my mailbox this morning I noodled on the problem some more and came up with that solution. The difficulty is that there is a lot of non-variadic cruft common to the general and specialized template classes. I didn't want to repeat all of that.
Another way to solve that could be to isolate the variadic stuff if a class (named "foo" below): template <typename S, typename W> class foo { void operator()(S, W); }; template <typename S> class foo<S, void> { void operator()(S); }; template <typename S, typename W> class derived: public foo<S, W>, public baseclass<S, W> { // common non-variadic stuff }; If I remember the C++ rules well, the operator() in "foo" would properly override the virtual operator() of "baseclass" in "derived". You can use a CRTP if "foo" needs anything in "derived" for its implementation... Bruno