diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-08-15 23:35:01 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-08-15 23:35:01 +0200 |
commit | 4ad4091b38faa39ddd2deae7455bd3a26531994f (patch) | |
tree | 689496332edb2210ed1500c64f9bcdb2c3926f78 /asl/object_tests.cpp | |
parent | 03e5d14ed191a5a600c7b9f6c33bb2b12fdd5eac (diff) |
Some work on object & init-related traits
Diffstat (limited to 'asl/object_tests.cpp')
-rw-r--r-- | asl/object_tests.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/asl/object_tests.cpp b/asl/object_tests.cpp index 794c540..e3d7d8d 100644 --- a/asl/object_tests.cpp +++ b/asl/object_tests.cpp @@ -1,4 +1,5 @@ #include "asl/object.hpp"
+#include "asl/test_types.hpp"
static_assert(asl::is_object<asl::object<void>>);
static_assert(asl::is_object<asl::object<int>>);
@@ -6,9 +7,64 @@ static_assert(asl::is_object<asl::object<int&>>); static_assert(asl::is_object<asl::object<int()>>);
static_assert(asl::is_empty<asl::object<void>>);
+static_assert(asl::is_empty<asl::object<asl::empty>>);
static_assert(sizeof(asl::object<int>) == 4);
static_assert(sizeof(asl::object<int*>) == sizeof(void*));
static_assert(sizeof(asl::object<int&>) == sizeof(void*));
static_assert(sizeof(asl::object<int()>) == sizeof(void*));
+static_assert(asl::default_constructible<asl::object<int>>);
+static_assert(asl::default_constructible<asl::object<TriviallyDefaultConstructible>>);
+static_assert(asl::default_constructible<asl::object<DefaultConstructible>>);
+static_assert(!asl::default_constructible<asl::object<NonDefaultConstructible>>);
+
+static_assert(asl::trivially_default_constructible<asl::object<int>>);
+static_assert(asl::trivially_default_constructible<asl::object<TriviallyDefaultConstructible>>);
+static_assert(!asl::trivially_default_constructible<asl::object<DefaultConstructible>>);
+static_assert(!asl::trivially_default_constructible<asl::object<NonDefaultConstructible>>);
+
+static_assert(asl::copy_constructible<asl::object<int>>);
+static_assert(asl::copy_constructible<asl::object<TriviallyCopyConstructible>>);
+static_assert(asl::copy_constructible<asl::object<CopyConstructible>>);
+static_assert(!asl::copy_constructible<asl::object<NonCopyConstructible>>);
+
+static_assert(asl::trivially_copy_constructible<asl::object<int>>);
+static_assert(asl::trivially_copy_constructible<asl::object<TriviallyCopyConstructible>>);
+static_assert(!asl::trivially_copy_constructible<asl::object<CopyConstructible>>);
+static_assert(!asl::trivially_copy_constructible<asl::object<NonCopyConstructible>>);
+
+static_assert(asl::move_constructible<asl::object<int>>);
+static_assert(asl::move_constructible<asl::object<TriviallyMoveConstructible>>);
+static_assert(asl::move_constructible<asl::object<MoveConstructible>>);
+static_assert(!asl::move_constructible<asl::object<NonMoveConstructible>>);
+
+static_assert(asl::trivially_move_constructible<asl::object<int>>);
+static_assert(asl::trivially_move_constructible<asl::object<TriviallyMoveConstructible>>);
+static_assert(!asl::trivially_move_constructible<asl::object<MoveConstructible>>);
+static_assert(!asl::trivially_move_constructible<asl::object<NonMoveConstructible>>);
+
+static_assert(asl::copy_assignable<asl::object<int>>);
+static_assert(asl::copy_assignable<asl::object<CopyAssignable>>);
+static_assert(asl::copy_assignable<asl::object<TriviallyCopyAssignable>>);
+static_assert(!asl::copy_assignable<asl::object<NoCopyAssignable>>);
+
+static_assert(asl::trivially_copy_assignable<asl::object<int>>);
+static_assert(!asl::trivially_copy_assignable<asl::object<CopyAssignable>>);
+static_assert(asl::trivially_copy_assignable<asl::object<TriviallyCopyAssignable>>);
+static_assert(!asl::trivially_copy_assignable<asl::object<NoCopyAssignable>>);
+
+static_assert(asl::move_assignable<asl::object<int>>);
+static_assert(asl::move_assignable<asl::object<MoveAssignable>>);
+static_assert(asl::move_assignable<asl::object<TriviallyMoveAssignable>>);
+static_assert(!asl::move_assignable<asl::object<NoMoveAssignable>>);
+
+static_assert(asl::trivially_move_assignable<asl::object<int>>);
+static_assert(!asl::trivially_move_assignable<asl::object<MoveAssignable>>);
+static_assert(asl::trivially_move_assignable<asl::object<TriviallyMoveAssignable>>);
+static_assert(!asl::trivially_move_assignable<asl::object<NoMoveAssignable>>);
+
+static_assert(asl::trivially_destructible<asl::object<int>>);
+static_assert(asl::trivially_destructible<asl::object<TriviallyDestructible>>);
+static_assert(!asl::trivially_destructible<asl::object<HasDestructor>>);
+
int main() { return 0; }
|