#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgVGVzdAp7CiAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2NhbGFyPFQ+Ojp2YWx1ZSwgIlRlbXBsYXRlIHBhcmFtZXRlciBtdXN0IGJlIGEgc2NhbGFyIHR5cGUiKTsKICAgIHVzaW5nIFNpZ25lZFQgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCBzdGQ6OmNvbW1vbl90eXBlPFQ+LCBzdGQ6Om1ha2Vfc2lnbmVkPFQ+Pjo6dHlwZTo6dHlwZTsKfTsKCmludCBtYWluKCkKewogICAgVGVzdDxpbnQ+IHQxOwogICAgVGVzdDxmbG9hdD4gdDI7Cn0K