From 4ad4091b38faa39ddd2deae7455bd3a26531994f Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 15 Aug 2024 23:35:01 +0200 Subject: Some work on object & init-related traits --- asl/test_types.hpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 asl/test_types.hpp (limited to 'asl/test_types.hpp') diff --git a/asl/test_types.hpp b/asl/test_types.hpp new file mode 100644 index 0000000..a5207c6 --- /dev/null +++ b/asl/test_types.hpp @@ -0,0 +1,25 @@ +#pragma once + +struct DefaultConstructible { DefaultConstructible() {} }; +struct TriviallyDefaultConstructible { TriviallyDefaultConstructible() = default; }; +struct NonDefaultConstructible { NonDefaultConstructible() = delete; }; + +struct CopyConstructible { CopyConstructible(const CopyConstructible&) {} }; +struct TriviallyCopyConstructible { TriviallyCopyConstructible(const TriviallyCopyConstructible&) = default; }; +struct NonCopyConstructible { NonCopyConstructible(const NonCopyConstructible&) = delete; }; + +struct MoveConstructible { MoveConstructible(MoveConstructible&&) {} }; +struct TriviallyMoveConstructible { TriviallyMoveConstructible(TriviallyMoveConstructible&&) = default; }; +struct NonMoveConstructible { NonMoveConstructible(NonMoveConstructible&&) = delete; }; + +struct CopyAssignable { CopyAssignable& operator=(const CopyAssignable&) { return *this; } }; +struct TriviallyCopyAssignable { TriviallyCopyAssignable& operator=(const TriviallyCopyAssignable&) = default; }; +struct NoCopyAssignable { NoCopyAssignable& operator=(const NoCopyAssignable&) = delete; }; + +struct MoveAssignable { MoveAssignable& operator=(MoveAssignable&&) { return *this; } }; +struct TriviallyMoveAssignable { TriviallyMoveAssignable& operator=(TriviallyMoveAssignable&&) = default; }; +struct NoMoveAssignable { NoMoveAssignable& operator=(NoMoveAssignable&&) = delete; }; + +struct TriviallyDestructible { ~TriviallyDestructible() = default; }; +struct HasDestructor { ~HasDestructor() {} }; + -- cgit