hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/examples/conditions.sfinae
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-19 13:47:08 +0200
committerhachem <im@hachem.wtf>2026-09-19 13:47:08 +0200
commitd0ca03c84bcad3dc42fd173b0baf3a15e9b52f9b (patch)
tree89fa494129849e23b1d760466e87ef6046cbfcb4 /examples/conditions.sfinae
parenta79c97e04562b171780a24cba2cb1a71acfa4bbb (diff)
feat: add conditionals
Diffstat (limited to 'examples/conditions.sfinae')
-rw-r--r--examples/conditions.sfinae35
1 files changed, 35 insertions, 0 deletions
diff --git a/examples/conditions.sfinae b/examples/conditions.sfinae
new file mode 100644
index 0000000..e930480
--- /dev/null
+++ b/examples/conditions.sfinae
@@ -0,0 +1,35 @@
+// a condition is not a condition until you say ::value
+
+// ::conditional_t picks a type. picking ::void and emitting it prints nothing at all
+::emit<
+ ::conditional_t<
+ ::less<::difference<'B', 'A'>, ::difference<'A', 'A'>>::value,
+ ::decltype(::difference<'Z', 'A'>),
+ ::void
+ >
+>::commit;
+
+// ::conditional does the same for values. this prints 9
+::emit<
+ ::decltype(
+ ::conditional<
+ ::is_same<::remove_cv_t<::int32_t>, ::int32_t>::value,
+ ::difference<'J', 'A'>,
+ ::difference<'A', 'A'>
+ >
+ )
+>::commit;
+
+// two arrays are the same type when their extents agree. this prints 1
+::emit<
+ ::decltype(
+ ::conditional<
+ ::is_same<
+ ::array<::byte, ::difference<'C', 'A'>>,
+ ::array<::int32_t, ::sum<::difference<'B', 'A'>, ::difference<'B', 'A'>>>
+ >::value,
+ ::difference<'B', 'A'>,
+ ::difference<'A', 'A'>
+ >
+ )
+>::commit;