最終更新日時:
が更新

履歴 編集

<simd>

std::simd::basic_vec::推論補助(C++26)

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

処理系

関連項目

参照