次のメタ関数は、1が立っている最も下位のビットだけを残し、他のビットを0にします。

上のメタ関数では静的な処理しか行えませんので、通常の関数テンプレートにしたのが下記です。

いずれも、負の値を与えると、処理系や値によっては未定義の動作を引き起こす可能性があります。

ちなみにC++11以降であれば先ほどのlowest_one_bit関数をconstexprにすることもできます。


元ネタ

↑ 1. 整数型に関するテンプレート