@@ -31,25 +31,24 @@ class dyn
3131
3232 // TODO add default constructor for nullable mixin
3333
34- // TODO generalize member constraints based on storage
3534 dyn (const dyn &other) = delete ;
3635 constexpr dyn (const dyn &other)
37- requires simply::copy_mixin<Mixin >
36+ requires simply::copy_constructible<storage_base >
3837 = default;
3938
4039 dyn (dyn &&other) = delete ;
41- constexpr dyn (dyn &&other) noexcept
42- requires simply::move_mixin<Mixin >
40+ constexpr dyn (dyn &&other)
41+ requires simply::move_constructible<storage_base >
4342 = default;
4443
45- template <typename Alloc, simply::has_mixin<Mixin > T, typename ... Args>
44+ template <typename Alloc, simply::has_mixin<mixin_type > T, typename ... Args>
4645 requires simply::constructible_from<T, Args...>
4746 constexpr explicit dyn (std::allocator_arg_t alloc_tag, const Alloc &alloc,
4847 std::in_place_type_t <T> obj_tag, Args &&...args)
4948 : storage_base(alloc_tag, alloc, obj_tag, std::forward<Args>(args)...),
5049 dispatch_base(obj_tag) {}
5150
52- template <simply::has_mixin<Mixin > T, typename ... Args>
51+ template <simply::has_mixin<mixin_type > T, typename ... Args>
5352 requires simply::constructible_from<T, Args...>
5453 constexpr explicit dyn (std::in_place_type_t <T> tag, Args &&...args)
5554 : storage_base(tag, std::forward<Args>(args)...), dispatch_base(tag) {}
@@ -58,7 +57,7 @@ class dyn
5857 requires (not std::same_as<std::remove_cvref_t <T>, dyn>) and
5958 (not simply::specialization_of<std::remove_cvref_t <T>,
6059 std::in_place_type_t >) and
61- simply::has_mixin<std::decay_t <T>, Mixin > and
60+ simply::has_mixin<std::decay_t <T>, mixin_type > and
6261 simply::constructible_from<std::decay_t <T>, T>
6362 constexpr explicit dyn (T &&value)
6463 : storage_base(std::in_place_type<std::decay_t <T>>,
@@ -67,7 +66,8 @@ class dyn
6766
6867 auto operator =(const dyn &other) -> dyn & = delete ;
6968 constexpr auto operator =(const dyn &other) -> dyn &
70- requires simply::destroy_mixin<Mixin> and simply::copy_mixin<Mixin>
69+ requires simply::destroy_mixin<mixin_type> and
70+ simply::copy_constructible<storage_base>
7171 {
7272 // prevent self-assignment
7373 if (this == std::addressof (other)) {
@@ -81,7 +81,8 @@ class dyn
8181
8282 auto operator =(dyn &&other) -> dyn & = delete ;
8383 constexpr auto operator =(dyn &&other) noexcept -> dyn &
84- requires simply::destroy_mixin<Mixin> and simply::move_mixin<Mixin>
84+ requires simply::destroy_mixin<mixin_type> and
85+ simply::move_constructible<storage_base>
8586 {
8687 std::destroy_at (this );
8788 std::construct_at (this , std::move (other));
@@ -92,9 +93,9 @@ class dyn
9293
9394 ~dyn () = delete ;
9495 constexpr ~dyn ()
95- requires simply::destroy_mixin<Mixin >
96+ requires simply::destroy_mixin<mixin_type >
9697 {
97- using destroy = simply::destroy_mixin_t <Mixin >;
98+ using destroy = simply::destroy_mixin_t <mixin_type >;
9899 simply::fn<destroy, dyn>(*this );
99100 }
100101};
0 commit comments