summaryrefslogtreecommitdiff
path: root/asl/tests/meta_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/tests/meta_tests.cpp')
-rw-r--r--asl/tests/meta_tests.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/asl/tests/meta_tests.cpp b/asl/tests/meta_tests.cpp
index f01258a..5026327 100644
--- a/asl/tests/meta_tests.cpp
+++ b/asl/tests/meta_tests.cpp
@@ -1,5 +1,7 @@
#include "asl/meta.hpp"
#include "asl/tests/test_types.hpp"
+#include "asl/testing/testing.hpp"
+#include "asl/box.hpp"
struct Struct {};
union Union {};
@@ -247,3 +249,41 @@ static_assert(!asl::is_enum<int>);
static_assert(asl::is_enum<Enum1>);
static_assert(asl::is_enum<Enum2>);
+static_assert(asl::derefs_as<int, int>);
+static_assert(asl::derefs_as<int*, int>);
+static_assert(asl::derefs_as<int&, int>);
+static_assert(asl::derefs_as<asl::box<int>, int>);
+
+static_assert(asl::derefs_as<Derived, Base>);
+static_assert(asl::derefs_as<Derived*, Base>);
+static_assert(asl::derefs_as<Derived&, Base>);
+static_assert(asl::derefs_as<asl::box<Derived>, Base>);
+
+static void wants_int(int) {}
+static void wants_base(Base&) {}
+static void wants_base_ptr(Base*) {}
+
+ASL_TEST(deref)
+{
+ int a = 4;
+ auto b = asl::make_box<int>(5);
+
+ wants_int(asl::deref<int>(5));
+ wants_int(asl::deref<int>(a));
+ wants_int(asl::deref<int>(&a));
+ wants_int(asl::deref<int>(b));
+
+ Derived c{};
+ auto d = asl::make_box<Derived>();
+
+ wants_base(asl::deref<Base>(Derived{}));
+ wants_base(asl::deref<Base>(c));
+ wants_base(asl::deref<Base>(&c));
+ wants_base(asl::deref<Base>(d));
+
+ wants_base_ptr(&asl::deref<Base>(Derived{}));
+ wants_base_ptr(&asl::deref<Base>(c));
+ wants_base_ptr(&asl::deref<Base>(&c));
+ wants_base_ptr(&asl::deref<Base>(d));
+}
+