¿Hay algo como una declaración de caso moderada?

Así que tengo este código realmente feo:

template <typename T>
std::conditional_t<sizeof(T) == sizeof(char),
                   char,
                   conditional_t<sizeof(T) == sizeof(short),
                                 short,
                                 conditional_t<sizeof(T) == sizeof(long),
                                               long,
                                               enable_if_t<sizeof(T) == sizeof(long long),
                                                           long long>>>> foo(T bar){return reinterpret_cast<decltype(foo(bar))>(bar);}

Estoy usando anidadoconditional_ts para hacer una especie de declaración de caso. ¿Hay algo por ahí que logre esto de manera más elegante o necesito preparar mi propia declaración de caso?

Nota: Soy consciente de que este uso dereinterpret_cast es malo:¿Por qué no reinterpreta_cast forzar copy_n para conversiones entre tipos del mismo tamaño?

Respuestas a la pregunta(5)

Su respuesta a la pregunta