Здравствуйте, Chorkov, Вы писали:
C>Правильный список типов для перекрывания:
C>https://godbolt.org/z/YrhYcjKaY
C>C>struct S {
C> S& operator<<(char ) { std::cout<<"char "<<std::endl; return *this; }
C> S& operator<<(signed char ) { std::cout<<"signed char "<<std::endl; return *this; }
C> S& operator<<(unsigned char ) { std::cout<<"unsigned char "<<std::endl; return *this; }
C> S& operator<<(signed short ) { std::cout<<"signed short "<<std::endl; return *this; }
C> S& operator<<(signed int ) { std::cout<<"signed int "<<std::endl; return *this; }
C> S& operator<<(signed long ) { std::cout<<"signed long "<<std::endl; return *this; }
C> S& operator<<(signed long long ) { std::cout<<"signed long long "<<std::endl; return *this; }
C> S& operator<<(unsigned short ) { std::cout<<"unsigned short "<<std::endl; return *this; }
C> S& operator<<(unsigned int ) { std::cout<<"unsigned int "<<std::endl; return *this; }
C> S& operator<<(unsigned long ) { std::cout<<"unsigned long "<<std::endl; return *this; }
C> S& operator<<(unsigned long long) { std::cout<<"unsigned long long"<<std::endl; return *this; }
C>
C>Суть: типы short и int (char и short, int и long, long и long long) могут иметь одинаковый размер, оставаясь разными типами. Тяжкое наследие Си.
C>Типы с фиксированным размером (std::intXX_t), ссылаются на один из этих типов.
C>Можно представить, что компилятор будет поддерживать какой-то специальный __int64_t, и std::int64_t ссылается на него, но я такого не встречал.
Да, в итоге так и сделал