.. title:: clang-tidy - modernize-use-std-bit modernize-use-std-bit ===================== Finds common idioms which can be replaced by standard functions from the ```` C++20 header. Covered scenarios: ============================== ========================== Expression Replacement ------------------------------ -------------------------- ``x && !(x & (x - 1))`` ``std::has_single_bit(x)`` ``(x != 0) && !(x & (x - 1))`` ``std::has_single_bit(x)`` ``(x > 0) && !(x & (x - 1))`` ``std::has_single_bit(x)`` ``std::bitset(x).count()`` ``std::popcount(x)`` ``x << 3 | x >> 61`` ``std::rotl(x, 3)`` ``x << 61 | x >> 3`` ``std::rotr(x, 3)`` ============================== ========================== Options ------- .. option:: HonorIntPromotion When set to ``true`` (default is ``false``), insert explicit cast to make sure the type of the substituted expression is unchanged. Example: .. code:: c++ // Return type is deduced as 'int' (not 'unsigned char') due to implicit conversions. auto foo(unsigned char x) { return x << 3 | x >> 5; } Becomes: .. code:: c++ #include auto foo(unsigned char x) { return static_cast(std::rotl(x, 3)); }