76[[nodiscard]]
constexpr auto operator!(
And<Preds...> const& p)
noexcept
78 return std::apply([](
auto&&... preds) {
return Or(!preds...); }, p.preds);
82[[nodiscard]]
constexpr auto operator!(
Or<Preds...> const& p)
noexcept
84 return std::apply([](
auto&&... preds) {
return And(!preds...); }, p.preds);
87template <Filterable PredPre, Filterable PredPost>
90 return And(p.pre, !p.post);
93template <Filterable PredLeft, Filterable PredRight>
97 return Xor(p.left, p.right);
100template <Filterable PredLeft, Filterable PredRight>
104 return Iff(p.left, p.right);
107template <
class Geometry>
114template <
class Geometry>
121[[nodiscard]]
constexpr PureLeaf operator!(
Inner)
noexcept {
return {}; }
122[[nodiscard]]
constexpr Inner operator!(
PureLeaf)
noexcept {
return {}; }
123[[nodiscard]]
constexpr Parent operator!(
Leaf)
noexcept {
return {}; }
124[[nodiscard]]
constexpr Leaf operator!(
Parent)
noexcept {
return {}; }