https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99396
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, but __digits is one smaller than we want for signed types. Plus before C++20 the left shifts of negative values are UB? Maybe all the rotates should be implemented using the corresponding unsigned types...