ubstituindo métodos virtuais C ++ com várias assinaturas [duplicado]

Esta pergunta já tem uma resposta aqui:

or que uma função substituída na classe derivada oculta outras sobrecargas da classe bas 4 respostas

Tenho uma classe base C ++ que declara um método virtual com duas assinaturas diferente

Assim que eu substituir uma das assinaturas de método virtual em uma classe derivada, o compilador (g ++ 4.6.3 e g ++ 4.7) não poderá mais corresponder o método com a segunda assinatura na mesma classe derivad

O código de exemplo abaixo não será compilado se eu definir SPECIALIZE_ONEARG como 1. Para compilá-lo novamente, também tenho que definir PASSTHRU_TWOARG como 1. Usar o método "PASSTHRU" não é ideal por causa da eficiência e porque o real a hierarquia de classes é muito mais profunda e eu preferiria não ligar na chamada para a classe bas

Esse comportamento é específico para g ++ ou estou apenas tentando fazer algo que não é suportado em C +

#define SPECIALIZE_ONEARG ( 0 )
#define PASSTHRU_TWOARG   ( 0 )

class base
{
public:
  virtual int myMethod( char a )         { return 1; }
  virtual int myMethod( char a, int b )  { return 2; }
};

class derived : public base
{
public:
#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
};

int main( int argc, char* argv[])
{
  derived myObj;

  return myObj.myMethod( 'a' ) * 10 + myObj.myMethod( 'b', 0 );
}