次の関数テンプレートは、ポインタの境界調整を求めるためのものです。厳密にいえば、ポインタを汎整数型に型変換した場合、それを元の型に再変換して値が変わらないこと以外、すべて処理系定義になるわけですが、実際にはポインタの値==アドレスと考えて問題ないケースがほとんどですので、その仮定の下で実装することにします。

なお、lowest_one_bit関数テンプレートは、1.13 無符号整数の最下位の ‘1’ のビットだけを抽出する。で定義したものです。

この関数で得られるのは、境界調整要求サイズではなくその倍数になります。境界調整要求サイズを得るのであれば、lowest_one_bit関数ではなく5.2 型のアラインメントを返す。で作成したalignofを使えば実現できます。


元ネタ

↑ 6. メモリ上のデータ操作テンプレート