Concept for a valid convex space: a value_type plus project(x) and operator()(x) that both return it.
#include <convex_spaces.hpp>
template<class Space>
typename std::remove_cvref_t<Space>::value_type;
} && requires(const std::remove_cvref_t<Space>& s, typename std::remove_cvref_t<Space>::value_type x) {
{ s.project(x) } -> std::same_as<typename std::remove_cvref_t<Space>::value_type>;
{ s(x) } -> std::same_as<typename std::remove_cvref_t<Space>::value_type>;
}
Concept for a valid convex space: a value_type plus project(x) and operator()(x) that both return it.
Definition convex_spaces.hpp:114