#include "asl/meta.hpp" #include "asl/tests/test_types.hpp" struct Struct {}; union Union {}; enum Enum : uint8_t { EnumVariant = 0, }; enum class EnumClass : uint8_t { Variant = 0, }; static_assert(!asl::same_as); static_assert(asl::same_as); static_assert(asl::same_as, float>); static_assert(asl::same_as, int>); static_assert(asl::default_constructible); static_assert(asl::default_constructible); static_assert(asl::default_constructible); static_assert(!asl::default_constructible); static_assert(asl::trivially_default_constructible); static_assert(asl::trivially_default_constructible); static_assert(!asl::trivially_default_constructible); static_assert(!asl::trivially_default_constructible); static_assert(asl::copy_constructible); static_assert(asl::copy_constructible); static_assert(asl::copy_constructible); static_assert(!asl::copy_constructible); static_assert(asl::trivially_copy_constructible); static_assert(asl::trivially_copy_constructible); static_assert(!asl::trivially_copy_constructible); static_assert(!asl::trivially_copy_constructible); static_assert(asl::move_constructible); static_assert(asl::move_constructible); static_assert(asl::move_constructible); static_assert(asl::move_constructible); static_assert(!asl::move_constructible); static_assert(asl::trivially_move_constructible); static_assert(asl::trivially_move_constructible); static_assert(!asl::trivially_move_constructible); static_assert(!asl::trivially_move_constructible); static_assert(asl::copy_assignable); static_assert(asl::copy_assignable); static_assert(asl::copy_assignable); static_assert(!asl::copy_assignable); static_assert(asl::trivially_copy_assignable); static_assert(!asl::trivially_copy_assignable); static_assert(asl::trivially_copy_assignable); static_assert(!asl::trivially_copy_assignable); static_assert(asl::move_assignable); static_assert(asl::move_assignable); static_assert(asl::move_assignable); static_assert(!asl::move_assignable); static_assert(asl::trivially_move_assignable); static_assert(!asl::trivially_move_assignable); static_assert(asl::trivially_move_assignable); static_assert(!asl::trivially_move_assignable); static_assert(asl::trivially_destructible); static_assert(asl::trivially_destructible); static_assert(!asl::trivially_destructible); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::is_void); static_assert(asl::is_void); static_assert(asl::is_void); static_assert(asl::is_void); static_assert(!asl::is_void); static_assert(!asl::is_void); static_assert(!asl::is_void); static_assert(!asl::is_void); static_assert(!asl::is_void); static_assert(!asl::is_void); static_assert(asl::is_ref); static_assert(asl::is_ref); static_assert(asl::is_ref); static_assert(asl::is_ref); static_assert(!asl::is_ref); static_assert(!asl::is_ref); static_assert(!asl::is_ref); static_assert(!asl::is_ref); static_assert(asl::is_ptr); static_assert(asl::is_ptr); static_assert(asl::is_ptr); static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::is_func); static_assert(asl::is_func); static_assert(asl::is_func); static_assert(asl::is_func); static_assert(asl::is_func); static_assert(asl::is_func); static_assert(!asl::is_func); static_assert(!asl::is_func); static_assert(!asl::is_func); static_assert(!asl::is_func); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(asl::is_object); static_assert(!asl::is_object); static_assert(!asl::is_object); static_assert(!asl::is_object); static_assert(!asl::is_object); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(asl::is_array); static_assert(asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(!asl::is_array); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::same_as>); static_assert(asl::types_count == 2); static_assert(asl::types_count == 2); static_assert(asl::types_count == 1); static_assert(asl::types_count<> == 0); static_assert(asl::trivially_copyable); static_assert(!asl::trivially_copyable); static_assert(!asl::trivially_copyable); static_assert(asl::trivially_copyable); static_assert(asl::trivially_copyable); class Base {}; class Derived : public Base {}; class C {}; class D { public: operator C() { return c; } C c; }; // NOLINT class E { public: template E(T&&) {} }; // NOLINT static_assert(asl::convertible_from); static_assert(!asl::convertible_from); static_assert(asl::convertible_from); static_assert(!asl::convertible_from); static_assert(asl::convertible_from); static_assert(!asl::convertible_from); static_assert(asl::convertible_from); static_assert(asl::convertible_from); static_assert(asl::convertible_from); static_assert(!asl::convertible_from); static_assert(!asl::convertible_from); static_assert(!asl::convertible_from); static_assert(asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::derived_from); static_assert(!asl::is_const); static_assert(asl::is_const); static_assert(!asl::is_const); static_assert(asl::is_const); static_assert(asl::is_floating_point); static_assert(asl::is_floating_point); static_assert(asl::is_floating_point); static_assert(!asl::is_floating_point); static_assert(!asl::is_floating_point); static_assert(!asl::is_floating_point);