possível especializar uma definição de modelo com base na existência de um typedef aninhado de um parâmetro de tipo de model

Tenho um modelo,template <typename T> class wrapper, que gostaria de me especializar com base na existência detypename T::context_type. E setypename T::context_type é declarado, então os construtores e o operador de atribuição sobrecarregam owrapper<T> instanciação deve aceitar um @ obrigatórtypename T::context_type parâmetro. Além disso,wrapper<T> objetos armazenariam "contexto" nos dados do membro. E setypename T::context_type não existe, então os construtores e o operador de atribuição sobrecarregam dewrapper<T> precisaria de um parâmetro a menos e não haveria membro de dados adiciona

Isso é possível? Posso obter o seguinte código para compilar sem alterar as definições deconfig1, config2 emain()?

#include <iostream>

template <typename T, bool context_type_defined = true>
class wrapper
{
public:
    typedef typename T::context_type context_type;

private:
    context_type ctx;

public:
    wrapper(context_type ctx_)
        : ctx(ctx_)
    {
        std::cout << "T::context_type exists." << std::endl;
    }
};

template <typename T>
class wrapper<T, false>
{
public:
    wrapper() {
        std::cout << "T::context_type does not exist." << std::endl;
    }
};

class config1 {
public:
    typedef int context_type;
};

class config2 {
public:
};

int main()
{
    wrapper<config1> w1(0);
    wrapper<config2> w2;
}

questionAnswers(3)

yourAnswerToTheQuestion