Metaprogramação: falha na definição de função define uma função separada

Noesta resposta Eu defino um modelo com base nos tiposis_arithmetic propriedade:

template<typename T> enable_if_t<is_arithmetic<T>::value, string> stringify(T t){
    return to_string(t);
}
template<typename T> enable_if_t<!is_arithmetic<T>::value, string> stringify(T t){
    return static_cast<ostringstream&>(ostringstream() << t).str();
}

dyp sugere que ao invés dois_arithmetic propriedade do tipo, que sejato_string é definido para o tipo ser o critério de seleção do modelo. Isso é claramente desejável, mas não sei como dizer:

E sestd::to_string não estiver definido, use oostringstream sobrecarga.

Declarando oto_string critérios é simples:

template<typename T> decltype(to_string(T{})) stringify(T t){
    return to_string(t);
}

É o oposto desse critério que não consigo descobrir como construir. Obviamente, isso não funciona, mas espero que transmita o que estou tentando construir:

template<typename T> enable_if_t<!decltype(to_string(T{})::value, string> (T t){
    return static_cast<ostringstream&>(ostringstream() << t).str();
}

questionAnswers(6)

yourAnswerToTheQuestion