8struct make_double_width {};
10struct make_double_width<uint8_t> {
11 using type = uint16_t;
14struct make_double_width<uint16_t> {
15 using type = uint32_t;
18struct make_double_width<uint32_t> {
19 using type = uint64_t;
22struct make_double_width<uint64_t> {
23 using type =
unsigned __int128;
26struct make_double_width<unsigned long long> {
27 using type =
unsigned __int128;
30struct make_double_width<int8_t> {
34struct make_double_width<int16_t> {
38struct make_double_width<int32_t> {
42struct make_double_width<int64_t> {
43 using type = __int128;
46struct make_double_width<long long> {
47 using type = __int128;
51using make_double_width_t =
typename make_double_width<T>::type;