summaryrefslogtreecommitdiff
path: root/asl/base
diff options
context:
space:
mode:
Diffstat (limited to 'asl/base')
-rw-r--r--asl/base/meta.hpp7
-rw-r--r--asl/base/meta_tests.cpp26
2 files changed, 15 insertions, 18 deletions
diff --git a/asl/base/meta.hpp b/asl/base/meta.hpp
index 8376d5c..8bebf2f 100644
--- a/asl/base/meta.hpp
+++ b/asl/base/meta.hpp
@@ -87,14 +87,11 @@ template<typename T> concept trivially_destructible = __is_trivially_destructibl
template<typename T> concept copyable = copy_constructible<T> && copy_assignable<T>;
template<typename T> concept moveable = move_constructible<T> && move_assignable<T>;
-template<typename To, typename From>
-concept convertible_from = __is_convertible(From, To);
-
template<typename From, typename To>
concept convertible_to = __is_convertible(From, To);
template<typename Derived, class Base>
-concept derived_from = __is_class(Derived) && __is_class(Base) && convertible_from<const volatile Base*, const volatile Derived*>;
+concept derived_from = __is_class(Derived) && __is_class(Base) && convertible_to<const volatile Derived*, const volatile Base*>;
using nullptr_t = decltype(nullptr);
@@ -258,7 +255,7 @@ concept derefs_as = is_object<To> &&
(convertible_to<un_ref_t<From>&, To&> || _dereferenceable_as_convertible<un_ref_t<From>, To>);
template<typename To, derefs_as<To> From>
-constexpr auto&& deref(From&& from) // NOLINT(*forward*)
+constexpr auto&& deref(From&& from) // NOLINT(*-missing-std-forward)
{
if constexpr (_dereferenceable_as_convertible<From, To>)
{
diff --git a/asl/base/meta_tests.cpp b/asl/base/meta_tests.cpp
index 6c8efab..490b453 100644
--- a/asl/base/meta_tests.cpp
+++ b/asl/base/meta_tests.cpp
@@ -205,19 +205,19 @@ class C {};
class D { public: operator C() { return c; } C c; }; // NOLINT
class E { public: template<class T> E(T&&) {} }; // NOLINT
-static_assert(asl::convertible_from<Base*, Derived*>);
-static_assert(!asl::convertible_from<Derived*, Base*>);
-static_assert(asl::convertible_from<C, D>);
-static_assert(!asl::convertible_from<C*, Derived*>);
-static_assert(asl::convertible_from<E, Base>);
-
-static_assert(!asl::convertible_from<int16_t(&)[], int32_t(&)[]>);
-static_assert(asl::convertible_from<const int16_t(&)[], int16_t(&)[]>);
-static_assert(asl::convertible_from<const int16_t(&)[], const int16_t(&)[]>);
-static_assert(asl::convertible_from<int16_t(&)[], int16_t(&)[]>);
-static_assert(!asl::convertible_from<int32_t(&)[], int16_t(&)[]>);
-static_assert(!asl::convertible_from<int16_t(&)[], const int16_t(&)[]>);
-static_assert(!asl::convertible_from<C(&)[], D(&)[]>);
+static_assert(asl::convertible_to<Derived*, Base*>);
+static_assert(!asl::convertible_to<Base*, Derived*>);
+static_assert(asl::convertible_to<D, C>);
+static_assert(!asl::convertible_to<Derived*, C*>);
+static_assert(asl::convertible_to<Base, E>);
+
+static_assert(!asl::convertible_to<int32_t(&)[], int16_t(&)[]>);
+static_assert(asl::convertible_to<int16_t(&)[], const int16_t(&)[]>);
+static_assert(asl::convertible_to<const int16_t(&)[], const int16_t(&)[]>);
+static_assert(asl::convertible_to<int16_t(&)[], int16_t(&)[]>);
+static_assert(!asl::convertible_to<int16_t(&)[], int32_t(&)[]>);
+static_assert(!asl::convertible_to<const int16_t(&)[], int16_t(&)[]>);
+static_assert(!asl::convertible_to<D(&)[], C(&)[]>);
static_assert(asl::derived_from<Derived, Base>);
static_assert(!asl::derived_from<Base, Derived>);