59 template <
typename matrix_t>
61 concept matrix_concept = requires(matrix_t m)
68 typename matrix_t::entry_type;
74 { m.cols() } -> size_t;
80 { m.rows() } -> size_t;
86 { m.at(
size_t{0u},
size_t{0u}) } ->
typename matrix_t::entry_type;
102 template <matrix_concept matrix1_t, matrix_concept matrix2_t>
106 inline bool operator==(matrix1_t
const & lhs, matrix2_t
const & rhs) noexcept
108 if (lhs.rows() != rhs.rows())
111 if (lhs.cols() != rhs.cols())
114 for (
size_t row = 0u; row < lhs.rows(); ++row)
115 for (
size_t col = 0u; col < lhs.cols(); ++col)
116 if (lhs.at(row, col) != rhs.at(row, col))
129 template <matrix_concept matrix1_t, matrix_concept matrix2_t>
133 inline bool operator!=(matrix1_t
const & lhs, matrix2_t
const & rhs) noexcept
135 return !(lhs == rhs);
Definition: aligned_sequence_concept.hpp:288
Requires std::detail::WeaklyEqualityComparableWitht<t1,t2>, but also that t1 and t2, as well as their common_reference_t satisfy std::EqualityComparable.