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();
}