Namespaces
Variants
Views
Actions

std::is_sufficiently_aligned

From cppreference.com
< cpp‎ | memory
 
 
Memory management library
(exposition only*)
Uninitialized memory algorithms
(C++17)
(C++17)
(C++17)
Constrained uninitialized
memory algorithms
C Library

Allocators
Memory resources
Garbage collection support
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
Uninitialized storage
(until C++20*)
(until C++20*)
Explicit lifetime management
 
Defined in header <memory>
template< std::size_t N, class T >
bool is_sufficiently_aligned( T* ptr );
(since C++26)

Checks whether the pointer ptr points to an object whose alignment has a value of at least N.

The behavior is undefined if ptr does not point to an object of type T (ignoring cv-qualification at every level).

Contents

[edit] Return value

true if ptr points to an object that has alignment at least N; otherwise false.

[edit] Exceptions

Throws nothing.

[edit] Notes

std::is_sufficiently_aligned can be used as a precondition to std::assume_aligned.

Feature-test macro Value Std Feature
__cpp_lib_is_sufficiently_aligned 202411L (C++26) std::is_sufficiently_aligned

[edit] Possible implementation

template<std::size_t N, class T>
bool is_sufficiently_aligned(T* ptr)
{
    return std::bit_cast<std::uintptr_t>(ptr) % N == 0;
}

[edit] Example

[edit] See also

alignof (C++11) queries alignment requirements of a type
(operator)[edit]
alignas (C++11) specifies that the storage for the variable should be aligned by specific amount
(specifier)[edit]
(since C++11)(deprecated in C++23)
defines the type suitable for use as uninitialized storage for types of given size
(class template) [edit]
(C++11)
aligns a pointer in a buffer
(function) [edit]
a type for aligned access to elements of mdspan
(class template) [edit]