Your definition is hiding the definition from the base class. In order for that definition to be visible at your derived scope, you need using base::myMethod
.
class derived : public base
{
public:
using base::myMethod; // <--- here
#if SPECIALIZE_ONEARG
virtual int myMethod( char a ) { return 3; }
#endif // SPECIALIZE_ONEARG
#if PASSTHRU_TWOARG
virtual int myMethod( char a, int b ) { return base::myMethod( a, b ); }
#endif // PASSTHRU_TWOARG
};