| 4652 | |
| 4653 | template<typename Action, typename Attribute, typename Context> |
| 4654 | constexpr auto action_assignable_to_val_apply() |
| 4655 | { |
| 4656 | if constexpr (is_nope_v<decltype(*std::declval<Context>().val_)>) { |
| 4657 | return false; |
| 4658 | } else if constexpr (!is_tuple<remove_cv_ref_t<Attribute>>{}) { |
| 4659 | return false; |
| 4660 | } else if constexpr (tuple_size_<remove_cv_ref_t<Attribute>> < 2) { |
| 4661 | return false; |
| 4662 | } else if constexpr (!is_detected_v< |
| 4663 | action_apply_call_expr, |
| 4664 | Action, |
| 4665 | Attribute>) { |
| 4666 | return false; |
| 4667 | } else if constexpr (std::is_same_v< |
| 4668 | action_apply_call_expr<Action, Attribute>, |
| 4669 | void>) { |
| 4670 | return false; |
| 4671 | } else { |
| 4672 | return is_detected_v< |
| 4673 | action_assignable_to_val_apply_expr, |
| 4674 | Action, |
| 4675 | Attribute, |
| 4676 | Context>; |
| 4677 | } |
| 4678 | } |
| 4679 | |
| 4680 | template<typename Context, typename TagType> |
| 4681 | constexpr bool in_recursion = |
nothing calls this directly
no outgoing calls
no test coverage detected