Я хотел бы сделать беззнаковый сдвиг в C ++.Вот мой пример кода.Проблема в том, что это не универсально.Этот код полностью неверен.Он не будет работать на long и не будет работать на меньших типах, таких как char.Я пытался (unsigned T)
, но это синтаксическая ошибка.Как я могу сделать этот универсальный без специализации?
#include <cassert>
template<class T>
T unsigned_shift(const T&t, int s) { return ((unsigned int)t)>>s; }
int main()
{
assert(unsigned_shift(-1, 2)==(-1u>>2));
assert(unsigned_shift((char)-1, 2)==64);
}