c++ - std::make_signed that accepts floating point types -
i have templated class can instantiated scalar types (integers, floats, etc.) , want member typedef signed variant of type. is:
unsigned int -> signed int
signed long long -> signed long long (already signed)
unsigned char -> signed char
float -> float
long double -> long double
etc...
unfortunately, std::make_signed works integral types, not floating point types. simplest way this? i'm looking of form using signedt = ...;, part of templated class template parameter t guaranteed scalar.
a simple template alias do:
#include <type_traits> template<typename t> struct identity { using type = t; }; template<typename t> using try_make_signed = typename std::conditional< std::is_integral<t>::value, std::make_signed<t>, identity<t> >::type; and how test it:
int main() { static_assert(::is_same< try_make_signed<unsigned int>::type, int >::value, "!"); static_assert(std::is_same< try_make_signed<double>::type, double >::value, "!"); } here live example.
Comments
Post a Comment