namespace std::simd {
template<class R, class... Ts>
basic_vec(R&& r, Ts...) -> /*see below*/; // (1)
template<std::size_t Bytes, class Abi>
basic_vec(basic_mask<Bytes, Abi>) -> /*see below*/; // (2)
}
概要
basic_vecクラステンプレートの型推論補助。
- (1) : 連続範囲(contiguous range)かつ要素数が定数式となる範囲から推論する。推論される型は
vec<std::ranges::range_value_t<R>, std::ranges::size(r)>と等価である。 - (2) :
basic_maskから推論する。推論される型はdecltype(+k)(マスクに単項プラスを適用して得られるbasic_vec)と等価である。
例
#include <simd>
#include <array>
#include <print>
namespace simd = std::simd;
int main()
{
// (1) 要素数が定数となる連続範囲から推論する
std::array<int, 4> arr = {1, 2, 3, 4};
simd::basic_vec v {arr}; // vec<int, 4>
// (2) マスクから推論する
simd::vec<int, 4> a = [](int i) { return i; }; // {0, 1, 2, 3}
auto m = (a < 2); // {true, true, false, false}
simd::basic_vec w {m}; // {1, 1, 0, 0}
for (int i = 0; i < v.size(); ++i) {
std::print("{} ", v[i]);
}
std::println("");
for (int i = 0; i < w.size(); ++i) {
std::print("{} ", w[i]);
}
std::println("");
}
出力
1 2 3 4
1 1 0 0
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
参照
- P1928R15 std::simd — merge data-parallel types from the Parallelism TS 2
- C++26で追加された
- P3922R1 Missing deduction guide from
simd::masktosimd::vecbasic_maskからbasic_vecへの推論補助が追加された