26 requires(
requires {
typename T::Mixin; })
33 concept Tag =
requires {
39 constexpr inline auto extent = T::extent;
45 requires(
requires {
typename T::SignedT; })
52template<detail::Tag Tag>
68 template<concepts::ConvertibleTo<T>... Ts>
69 requires(
sizeof...(Ts) == extent)
72 constexpr auto values() -> Storage& {
return m_values; }
73 constexpr auto values() const -> Storage const& {
return m_values; }
79 constexpr auto end()
const {
return values().end(); }
82 for (
auto [a, b] : di::zip(*
this, other)) {
88 for (
auto& x : *
this) {
93 constexpr auto operator+=(SignedT
const& value) ->
Vec&
requires(!di::SameAs<SignedT, T>) {
94 for (
auto& x : *
this) {
101 for (
auto [a, b] : di::zip(*
this, other)) {
107 for (
auto& x : *
this) {
112 constexpr auto operator-=(SignedT
const& value) ->
Vec&
requires(!di::SameAs<SignedT, T>) {
113 for (
auto& x : *
this) {
120 for (
auto& x : *
this) {
127 for (
auto& x : *
this) {
136 return a.values() == b.values();
141 return a.values() <=> b.values();
243 template<usize index>
244 requires(index < extent)
250 template<usize index>
251 requires(index < extent)
257 template<concepts::DecaySameAs<Vec> Self, usize index>
258 requires(index < extent)
constexpr friend auto operator+(Vec const &a, T const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:152
constexpr friend auto operator*(T const &b, Vec &a) -> Vec
Definition vec.h:222
constexpr auto values() const -> Storage const &
Definition vec.h:73
constexpr friend auto operator-(Vec const &a, T const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:188
constexpr auto operator/=(T const &value) -> Vec &
Definition vec.h:126
constexpr auto operator+=(SignedT const &value) -> Vec &requires(!di::SameAs< SignedT, T >)
Definition vec.h:93
constexpr auto operator-=(Vec const &other) -> Vec &
Definition vec.h:100
constexpr friend auto operator+(T const &b, Vec const &a) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:166
constexpr friend auto operator-(SignedT const &b, Vec const &a) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:209
constexpr auto operator+=(T const &value) -> Vec &
Definition vec.h:87
constexpr friend auto tag_invoke(di::Tag< vocab::tuple_element >, di::InPlaceType< Vec const >, Constexpr< index >) -> InPlaceType< T const >
Definition vec.h:252
constexpr friend auto operator==(Vec const &a, Vec const &b) -> bool requires(concepts::EqualityComparable< T >)
Definition vec.h:133
constexpr friend auto operator+(SignedT const &b, Vec const &a) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:173
constexpr auto begin() const
Definition vec.h:76
constexpr auto operator*=(T const &value) -> Vec &
Definition vec.h:119
constexpr auto operator+=(Vec const &other) -> Vec &
Definition vec.h:81
constexpr auto operator-=(SignedT const &value) -> Vec &requires(!di::SameAs< SignedT, T >)
Definition vec.h:112
constexpr friend auto operator+(Vec const &a, SignedT const &b) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:159
constexpr auto begin()
Definition vec.h:75
constexpr auto end()
Definition vec.h:78
constexpr friend auto tag_invoke(di::Tag< util::get_in_place >, Constexpr< index >, Self &&self) -> decltype(auto)
Definition vec.h:259
constexpr friend auto operator-(Vec const &a, SignedT const &b) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:195
constexpr friend auto operator*(Vec const &a, T const &b) -> Vec
Definition vec.h:217
constexpr friend auto tag_invoke(di::Tag< vocab::tuple_size >, di::InPlaceType< Vec >)
Definition vec.h:241
constexpr friend auto operator-(T const &b, Vec const &a) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:202
constexpr friend auto operator/(T const &b, Vec &a) -> Vec
Definition vec.h:233
constexpr friend auto operator+(Vec const &a, Vec const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:145
constexpr friend auto tag_invoke(di::Tag< vocab::tuple_element >, di::InPlaceType< Vec >, Constexpr< index >) -> InPlaceType< T >
Definition vec.h:245
constexpr friend auto operator-(Vec const &a, Vec const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:181
constexpr Vec(Ts &&... values)
Definition vec.h:70
constexpr auto values() -> Storage &
Definition vec.h:72
constexpr auto end() const
Definition vec.h:79
constexpr friend auto operator/(Vec const &a, T const &b) -> Vec
Definition vec.h:228
constexpr friend auto operator<=>(Vec const &a, Vec const &b)
Definition vec.h:138
constexpr auto operator-=(T const &value) -> Vec &
Definition vec.h:106
Definition operations.h:40
Definition operations.h:27
meta::Type< SignedTHelper< T > > SignedT
Definition vec.h:49
constexpr auto extent
Definition vec.h:39
meta::Type< MixinHelper< T > > Mixin
Definition vec.h:30
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
Definition in_place_type.h:5
Definition add_member_get.h:10
Definition span_fixed_size.h:37