akreon-linalg
Fixed-size linear algebra and numerical methods in C++26.
Loading...
Searching...
No Matches
matrix_concepts.hpp
Go to the documentation of this file.
1/*
2 * Copyright © 2025-2026 Akreon LLC
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6#pragma once
7
8#include <concepts>
9
12#include "matrix_traits.hpp"
13
14namespace linalg {
15
25template <class Mat>
26concept MatrixContainer = requires {
27 typename matrix_scalar_t<Mat>;
28 { mat_rows_v<Mat> } -> std::convertible_to<std::size_t>;
29 { mat_cols_v<Mat> } -> std::convertible_to<std::size_t>;
31
34template <class Mat>
35concept SquareMatrix =
37
39template <class Mat>
41
43template <class Mat>
45
53template <class Mat, class Vec>
56 std::same_as<matrix_scalar_t<Mat>, vector_element_t<Vec>> &&
58
66template <class MatA, class MatB>
69 std::same_as<matrix_scalar_t<MatA>, matrix_scalar_t<MatB>> &&
71
72} // namespace linalg
Matrix container with a complex scalar field.
Field classified by scalar_traits as complex.
Registered vector whose element type satisfies Field.
Registered scalar supporting the Akreon Linalg's field arithmetic interface.
Compile-time compatibility contract for matrix multiplication.
Compile-time compatibility contract for matrix-vector multiplication.
Trait-registered, fixed-shape matrix over a supported scalar field.
Matrix container with a real scalar field.
Field classified by scalar_traits as real.
Matrix container whose compile-time row and column counts are equal.
constexpr std::size_t mat_rows_v
Registered compile-time row count after cv/ref normalization.