• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <memory>

    std::is_sufficiently_aligned

    namespace std {
      template<size_t Alignment, class T>
        bool is_sufficiently_aligned(T* ptr);
    }
    

    概要

    ポインタ値が指定したアライメントを満たすか否かを返す。

    事前条件

    ポインタpが、Tに類似(similar)した型のオブジェクトXを指すこと。

    戻り値

    Xが少なくともAlignmentでアライメントされるならばtrue。そうでなければfalse

    例外

    投げない

    この機能が必要になった背景・経緯

    この関数テンプレートは<mdspan>ヘッダへのaligned_accessor導入に伴って必要とされた機能である。 一方で、ポインタ値のアライメント要件を検査するユースケースは一般的と考えられたため、汎用ユーティリティとして<memory>ヘッダに対して機能追加された。

    #include <cassert>
    #include <memory>
    #include <new>
    
    int main()
    {
      int *ptr = new(std::align_val_t{32}) int;
      assert( std::is_sufficiently_aligned<32>(ptr) );
      delete ptr;
    }
    

    出力

    実装例

    // 提案文書P2897R7より引用
    template<size_t ByteAlignment, class ElementType>
    bool is_sufficiently_aligned(ElementType* p)
    {
      return bit_cast<uintptr_t>(p) % ByteAlignment == 0;
    }
    

    バージョン

    言語

    • C++26

    処理系

    関連項目

    参照