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&nbsp;que ao invés dois_arithmetic&nbsp;propriedade do tipo, que sejato_string&nbsp;é 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&nbsp;não estiver definido, use oostringstream&nbsp;sobrecarga.

Declarando oto_string&nbsp;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();
}