aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/conditional/cond.h14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/conditional/cond.h b/src/conditional/cond.h
index 5f8014f..ca5e46d 100644
--- a/src/conditional/cond.h
+++ b/src/conditional/cond.h
@@ -12,12 +12,20 @@ namespace detail {
template <typename Pair>
using cond_predicate = IsTrue<Car<Pair>>;
+template <typename... Branches>
+struct select_cond_branch {
+ using type = Eval<detail::find_variadic<detail::cond_predicate, Branches...>>;
+
+ static_assert(
+ IsPair<type>::value,
+ "all branch conditions resolve to false"
+ );
+};
+
}
template <typename... Branches>
-using Cond = Cdr<Eval<
- detail::find_variadic<detail::cond_predicate, Branches...>
->>;
+using Cond = Cdr<Eval<detail::select_cond_branch<Branches...>>>;
template <
typename Condition,