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>
54 :
public detail::Mixin<Tag>
58 using SignedT = detail::SignedT<Tag>;
59 constexpr static auto extent = detail::extent<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) {
94 requires(!di::SameAs<SignedT, T>)
96 for (
auto& x : *
this) {
103 for (
auto [a, b] : di::zip(*
this, other)) {
109 for (
auto& x : *
this) {
115 requires(!di::SameAs<SignedT, T>)
117 for (
auto& x : *
this) {
124 for (
auto& x : *
this) {
131 for (
auto& x : *
this) {
140 return a.values() == b.values();
145 return a.values() <=> b.values();
247 template<usize index>
248 requires(index < extent)
254 template<usize index>
255 requires(index < extent)
261 template<concepts::DecaySameAs<Vec> Self, usize index>
262 requires(index < extent)
constexpr friend auto operator+(Vec const &a, T const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:156
constexpr friend auto operator*(T const &b, Vec &a) -> Vec
Definition vec.h:226
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:192
constexpr auto operator/=(T const &value) -> Vec &
Definition vec.h:130
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:102
constexpr friend auto operator+(T const &b, Vec const &a) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:170
constexpr friend auto operator-(SignedT const &b, Vec const &a) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:213
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:256
constexpr friend auto operator==(Vec const &a, Vec const &b) -> bool requires(concepts::EqualityComparable< T >)
Definition vec.h:137
constexpr friend auto operator+(SignedT const &b, Vec const &a) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:177
constexpr auto begin() const
Definition vec.h:76
constexpr auto operator*=(T const &value) -> Vec &
Definition vec.h:123
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:114
constexpr friend auto operator+(Vec const &a, SignedT const &b) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:163
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:263
constexpr friend auto operator-(Vec const &a, SignedT const &b) -> Vec requires(concepts::Copyable< T > &&!di::SameAs< T, SignedT >)
Definition vec.h:199
constexpr friend auto operator*(Vec const &a, T const &b) -> Vec
Definition vec.h:221
constexpr friend auto tag_invoke(di::Tag< vocab::tuple_size >, di::InPlaceType< Vec >)
Definition vec.h:245
constexpr friend auto operator-(T const &b, Vec const &a) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:206
constexpr friend auto operator/(T const &b, Vec &a) -> Vec
Definition vec.h:237
constexpr friend auto operator+(Vec const &a, Vec const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:149
constexpr friend auto tag_invoke(di::Tag< vocab::tuple_element >, di::InPlaceType< Vec >, Constexpr< index >) -> InPlaceType< T >
Definition vec.h:249
constexpr friend auto operator-(Vec const &a, Vec const &b) -> Vec requires(concepts::Copyable< T >)
Definition vec.h:185
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:232
constexpr friend auto operator<=>(Vec const &a, Vec const &b)
Definition vec.h:142
constexpr auto operator-=(T const &value) -> Vec &
Definition vec.h:108
Definition operations.h:40
Definition operations.h:27
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