45 using ContractedType = X;
58 virtual void contract(X& x)
const = 0;
60 virtual std::shared_ptr<CtcBase<X>> copy()
const = 0;
67 template<
typename C,
typename X_>
68 class Ctc :
public CtcBase<X_>
76 virtual std::shared_ptr<CtcBase<X_>> copy()
const
78 return std::make_shared<C>(*
dynamic_cast<const C*
>(
this));
82 template<
class C,
class X>
83 concept IsCtcBaseOrPtr = (std::is_base_of_v<CtcBase<X>,C>
84 || std::is_same_v<std::shared_ptr<CtcBase<X>>,C>);
86 template<
class C,
class X>
87 concept IsCtcBase = std::is_base_of_v<CtcBase<X>,C>;
91 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
92 struct is_interval_based<C> : std::false_type {};
95 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
96 struct is_ctc<C> : std::true_type {};
99 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
100 struct is_sep<C> : std::false_type {};