std::is_sufficiently_aligned - cppreference.com
Namespaces
Variants

std::is_sufficiently_aligned

From cppreference.com
 
 
Memory management library
Allocators
Memory resources
Uninitialized storage (until C++20*)
Garbage collector support (until C++23)
 
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).

Return value

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

Exceptions

Throws nothing.

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

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;
}

Example

See also