- simd[meta header]
- std::simd[meta namespace]
- class template[meta id-type]
- cpp26[meta cpp]
namespace std::simd {
template<class T, class U = typename T::value_type>
struct alignment { /*see below*/ };
template<class T, class U = typename T::value_type>
constexpr std::size_t alignment_v = alignment<T, U>::value;
}alignmentは、データ並列型T(basic_vec)を、要素型Uの配列に対してアライメント済みで読み込み/書き込むために必要な、メモリ先頭のアライメント(バイト数)を取得する型特性である。
flag_alignedを指定して読み込み/書き込む場合、メモリ先頭はこのalignment_v<T, U>バイト境界にアライメントされていなければならない。
メンバ定数valueは、Tがbasic_vecの特殊化であり、Uがvectorizable typeである場合にのみ存在する。
#include <simd>
#include <print>
namespace simd = std::simd;
int main()
{
using V = simd::vec<float, 4>;
std::println("{}", simd::alignment_v<V>);
}- simd::vec[link basic_vec.md]
- simd::alignment_v[color ff0000]
16
- C++26
- Clang: 22 [mark noimpl]
- GCC: 16.1 [mark noimpl]
- Visual C++: 2026 Update 2 [mark noimpl]
- P1928R15 std::simd — merge data-parallel types from the Parallelism TS 2
- C++26で
std::simdライブラリが追加された
- C++26で
- LWG Issue 4413. Unused/left-over
simd::alignmentspecialization forbasic_mask- C++26で、メンバ定数
valueが存在する条件からbasic_maskとboolの組み合わせが削除され、basic_vecの特殊化かつUがvectorizable typeの場合のみとなった
- C++26で、メンバ定数