#include <iostream>
#include <type_traits>

template<typename T>
struct Test
{
    static_assert(std::is_scalar<T>::value, "Template parameter must be a scalar type");
    using SignedT = typename std::conditional<std::is_floating_point<T>::value, std::common_type<T>, std::make_signed<T>>::type::type;
};

int main()
{
    Test<int> t1;
    Test<float> t2;
}
