- memory[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp29[meta cpp]
namespace std {
constexpr unsigned int pointer_bits_available(size_t alignment); // (1) C++29
}指定したアライメントを持つオブジェクトを指すポインタにおいて、ポインタタギングに使用できるビット数を取得する。
pointer_tag_pair<Ptr>のBitsRequestedのデフォルト値は、この関数に指す先の型のアライメントを渡した結果として定義される。
alignmentが2のべき乗であること
アライメントalignmentを持つ仮想的なオブジェクトを指すポインタ内の、使用されないビット数(処理系定義)を返す。
事前条件を満たしていること。
alignmentが1より大きい場合、結果は非0であることが推奨される- 多くのプラットフォームでは、結果は
countr_zero(alignment)とmax_pointer_bits_availableの小さい方となる
#include <memory>
#include <iostream>
int main()
{
// 8バイトアライメントのオブジェクトへのポインタで使えるタグのビット数
std::cout << std::pointer_bits_available(8) << std::endl;
}- std::pointer_bits_available[color ff0000]
3
- C++29
- Clang: ??
- GCC: ??
- Visual C++: ??