最終更新日時: 2026年02月08日 18時00分28秒 (JST)
yoh が更新

履歴 編集

concept
<linalg>

# in-object, out-object, inout-object(C++26)

    template<class T>
    concept in-object =
      is-mdspan<T> && (T::rank() == 1 || T::rank() == 2);

    template<class T>
    concept out-object =
      is-mdspan<T> && (T::rank() == 1 || T::rank() == 2) &&
      is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

    template<class T>
    concept inout-object =
      is-mdspan<T> && (T::rank() == 1 || T::rank() == 2) &&
      is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

## 概要

型`T`がベクトル（1次元`mdspan`）または行列（2次元`mdspan`）であることを表す、説明専用のコンセプトである。

- `in-object` : 入力パラメータを表す。アルゴリズム内で`mdspan`要素が更新されることはない。
- `out-object` : 出力パラメータを表す。演算結果の書き出しが行われる。
- `inout-object` : 入出力パラメータを表す。要素の読み取りと演算結果の書き出しが行われる。

関数仕様で明示されない限り、`out-object`および`inout-object`で制約される`mdspan`型引数は、同関数の他`mdspan`引数のエイリアスであってはならない。

## バージョン

### 言語

- C++26

## 参照

- P1673R13 A free function linear algebra interface based on the BLAS