Get tipo de retorno da função de membro sem um objeto

Tenho várias classes que não posso modificar. Cada um tem um construtor de cópia, pelo menos um outro construtor e uma funçãofoo() que retorna algum valor. Eu quero criar um modelo de classe que possa derivar de cada uma dessas classes e tenha um membro de dados que seja do mesmo tipo que o retorno, tipo defoo() (desculpe se tenho alguma terminologia errada

Em outras palavras, eu gostaria de um modelo de classe

template<typename T> class C : public T
{
  footype fooresult;
};

Ondefootype é o tipo de retorno deT::foo().

Se todas as classes base tivessem, digamos, um construtor padrão, eu poderia fazer

decltype(T().foo()) fooresult;

(com a funcionalidade C ++ 0x no GCC), mas as classes não têm nenhum construtor específico em comum, além dos construtores de cópi

GCC também não permitedecltype(this->foo()), embora aparentemente haja a possibilidade de isso ser adicionado ao padrão C ++ 0x - alguém sabe qual é a probabilidade diss

Sinto que deveria ser possível fazer algo comodecltype(foo()) oudecltype(T::foo()) mas parece que não funciona: o GCC apresenta um erro no formuláriocannot call member function 'int A::foo()' without object.

Claro, eu poderia ter um parâmetro de modelo extrafootype ou mesmo um parâmetro que não seja da classe do tipoT, mas existe alguma maneira de evitar isso?

questionAnswers(2)

yourAnswerToTheQuestion