detectando typedef em tempo de compilação (metaprogramação de modelos)

Atualmente, estou fazendo uma metaprogramação de modelos. No meu caso, eu posso lidar com qualquer tipo "iterável", ou seja, qualquer tipo para o qual umtypedef foo const_iterator existe da mesma maneira. Eu estava tentando usar a nova metaprogramação de modelo C ++ 11 para isso, mas não consegui encontrar um método para detectar se um determinado tipo está ausente.

Como também preciso ativar / desativar outras especializações de modelo com base em outras características, atualmente estou usando um modelo com dois parâmetros e o segundo é produzido viastd::enable_if. Aqui está o que estou fazendo atualmente:

template <typename T, typename Enable = void>
struct Foo{}; // default case is invalid

template <typename T>
struct Foo< T, typename std::enable_if<std::is_fundamental<T>::value>::type>{ 
   void do_stuff(){ ... }
};

template<typename T>
struct exists{
   static const bool value = true;
};

template<typename T>
struct Foo<T, typename std::enable_if<exists< typename T::const_iterator >::value >::type> {
    void do_stuff(){ ... }
};

Eu não fui capaz de fazer algo assim sem oexists modelo auxiliar. Por exemplo, simplesmente fazendo

template<typename T>
struct Foo<T, typename T::const_iterator> {
    void do_stuff(){ ... }
};

não funcionou, porque nos casos em que essa especialização deve ser usada, o caso padrão inválido foi instanciad

No entanto, não consegui encontrar issoexists em qualquer lugar do novo padrão C ++ 11, que até onde eu sei simplesmente está retirandoboost::type_traits para esse tipo de coisa. No entanto, nopagina inicia paraboost::type_traits não mostra nenhuma referência a qualquer coisa que possa ser usad

ssa funcionalidade está ausente ou ignorei outra maneira óbvia de obter o comportamento desejad

questionAnswers(4)

yourAnswerToTheQuestion