From d0ca03c84bcad3dc42fd173b0baf3a15e9b52f9b Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 19 Sep 2026 13:47:08 +0200 Subject: feat: add conditionals --- examples/conditions.sfinae | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 examples/conditions.sfinae (limited to 'examples/conditions.sfinae') 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; -- cgit v1.3