@@ -51,12 +51,21 @@ concept derived_from_specialization_of = requires(Derived *derived) {
5151template <typename T>
5252concept compound_affordance =
5353 simply::affordance<T> and
54- simply::derived_from_specialization_of <T, simply::conjunction >;
54+ std::derived_from <T, simply::compound_affordance_base >;
5555
5656template <typename T>
5757concept fundamental_affordance =
58- simply::affordance<T> and
59- not simply::derived_from_specialization_of<T, simply::conjunction>;
58+ simply::affordance<T> and not simply::compound_affordance<T>;
59+
60+ template <typename T>
61+ concept composition_affordance =
62+ simply::compound_affordance<T> and
63+ simply::derived_from_specialization_of<T, simply::composes>;
64+
65+ template <typename T>
66+ concept choice_affordance =
67+ simply::compound_affordance<T> and
68+ simply::derived_from_specialization_of<T, simply::chooses>;
6069
6170template <typename T>
6271concept member_affordance =
@@ -86,88 +95,88 @@ concept fundamental_destroy_affordance =
8695template <typename T, typename U>
8796concept different_from = not std::same_as<T, U>;
8897
89- template <simply::compound_affordance Compound , typename T>
90- inline constexpr bool enable_affordance_for<Compound , T> =
98+ template <simply::composition_affordance Composition , typename T>
99+ inline constexpr bool enable_affordance_for<Composition , T> =
91100 simply::enable_affordance_for<
92- simply::unique_fundamental_affordances_t <Compound >, T>;
101+ simply::unique_fundamental_affordances_t <Composition >, T>;
93102
94103template <simply::fundamental_affordance... Fundamental, typename T>
95104inline constexpr bool
96- enable_affordance_for<simply::conjunction <Fundamental...>, T> =
105+ enable_affordance_for<simply::composes <Fundamental...>, T> =
97106 (... and simply::enable_affordance_for<Fundamental, T>);
98107
99- template <simply::compound_affordance T, typename Tag>
108+ template <simply::composition_affordance T, typename Tag>
100109inline constexpr bool enable_affordance_tag<T, Tag> =
101110 simply::enable_affordance_tag<simply::unique_fundamental_affordances_t <T>,
102111 Tag>;
103112
104113template <simply::fundamental_affordance... Ts, typename Tag>
105- inline constexpr bool enable_affordance_tag<simply::conjunction <Ts...>, Tag> =
114+ inline constexpr bool enable_affordance_tag<simply::composes <Ts...>, Tag> =
106115 (... or simply::enable_affordance_tag<Ts, Tag>);
107116
108- template <simply::compound_affordance Compound , typename Tag>
109- struct fundamental_affordance_type <Compound , Tag>
117+ template <simply::composition_affordance Composition , typename Tag>
118+ struct fundamental_affordance_type <Composition , Tag>
110119 : simply::fundamental_affordance_type<
111- simply::unique_fundamental_affordances_t <Compound >, Tag> {};
120+ simply::unique_fundamental_affordances_t <Composition >, Tag> {};
112121
113122template <simply::fundamental_affordance... Fundamental, typename Tag>
114- struct fundamental_affordance_type <simply::conjunction <Fundamental...>, Tag>
123+ struct fundamental_affordance_type <simply::composes <Fundamental...>, Tag>
115124 : simply::fundamental_affordance_type<Fundamental, Tag>... {};
116125
117126template <simply::fundamental_affordance Affordance, typename Tag>
118127 requires simply::enable_affordance_tag<Affordance, Tag>
119128struct fundamental_affordance_type <Affordance, Tag>
120129 : std::type_identity<Affordance> {};
121130
122- // terminate on outer affordances <>
131+ // terminate on outer composes <>
123132template <typename Unique>
124- struct unique_fundamental_affordances <simply::conjunction <>, Unique>
133+ struct unique_fundamental_affordances <simply::composes <>, Unique>
125134 : std::type_identity<Unique> {};
126135
127- // handle outer Fundamental as affordances <Fundamental>
136+ // handle outer Fundamental as composes <Fundamental>
128137template <simply::fundamental_affordance Fundamental, typename Unique>
129138struct unique_fundamental_affordances <Fundamental, Unique>
130- : simply::unique_fundamental_affordances<simply::conjunction <Fundamental>,
139+ : simply::unique_fundamental_affordances<simply::composes <Fundamental>,
131140 Unique> {};
132141
133- // handle outer Compound as affordances <...>
134- template <simply::compound_affordance Compound , typename Unique>
135- struct unique_fundamental_affordances <Compound , Unique>
142+ // handle outer Composition as composes <...>
143+ template <simply::composition_affordance Composition , typename Unique>
144+ struct unique_fundamental_affordances <Composition , Unique>
136145 : simply::unique_fundamental_affordances<
137- simply::base_conjunction_t <Compound >, Unique> {};
146+ simply::base_composition_t <Composition >, Unique> {};
138147
139148// add inner Fundamental if different from all Unique
140149template <simply::fundamental_affordance Fundamental, typename ... Rest,
141150 simply::different_from<Fundamental>... Unique>
142- struct unique_fundamental_affordances <simply::conjunction <Fundamental, Rest...>,
143- simply::conjunction <Unique...>>
151+ struct unique_fundamental_affordances <simply::composes <Fundamental, Rest...>,
152+ simply::composes <Unique...>>
144153 : simply::unique_fundamental_affordances<
145- simply::conjunction <Rest...>,
146- simply::conjunction<Unique..., Fundamental>> { };
154+ simply::composes <Rest...>, simply::composes<Unique..., Fundamental>> {
155+ };
147156
148157// drop inner Fundamental otherwise
149158template <simply::fundamental_affordance Fundamental, typename ... Rest,
150159 typename Unique>
151- struct unique_fundamental_affordances <simply::conjunction <Fundamental, Rest...>,
160+ struct unique_fundamental_affordances <simply::composes <Fundamental, Rest...>,
152161 Unique>
153- : simply::unique_fundamental_affordances<simply::conjunction <Rest...>,
162+ : simply::unique_fundamental_affordances<simply::composes <Rest...>,
154163 Unique> {};
155164
156- // handle inner Compound as affordances <...>
157- template <simply::compound_affordance Compound , typename ... Rest,
165+ // handle inner Composition as composes <...>
166+ template <simply::composition_affordance Composition , typename ... Rest,
158167 typename Unique>
159- struct unique_fundamental_affordances <simply::conjunction<Compound , Rest...>,
168+ struct unique_fundamental_affordances <simply::composes<Composition , Rest...>,
160169 Unique>
161170 : simply::unique_fundamental_affordances<
162- simply::conjunction <simply::base_conjunction_t <Compound >, Rest...>,
171+ simply::composes <simply::base_composition_t <Composition >, Rest...>,
163172 Unique> {};
164173
165- // handle inner affordances <First...> as First...
174+ // handle inner composes <First...> as First...
166175template <typename ... First, typename ... Rest, typename Unique>
167176struct unique_fundamental_affordances <
168- simply::conjunction <simply::conjunction <First...>, Rest...>, Unique>
177+ simply::composes <simply::composes <First...>, Rest...>, Unique>
169178 : simply::unique_fundamental_affordances<
170- simply::conjunction <First..., Rest...>, Unique> {};
179+ simply::composes <First..., Rest...>, Unique> {};
171180
172181} // namespace simply
173182
0 commit comments