From f7a2699ac0cbb2824862439a72f23013436484de Mon Sep 17 00:00:00 2001
From: Steven Le Rouzic <steven.lerouzic@gmail.com>
Date: Wed, 14 May 2025 00:23:11 +0200
Subject: Add and use copy_const_t

---
 asl/base/meta.hpp       |  2 ++
 asl/base/meta_tests.cpp | 10 ++++++++++
 2 files changed, 12 insertions(+)

(limited to 'asl/base')

diff --git a/asl/base/meta.hpp b/asl/base/meta.hpp
index 3675df3..e050e69 100644
--- a/asl/base/meta.hpp
+++ b/asl/base/meta.hpp
@@ -146,6 +146,8 @@ struct _copy_const_helper<From, To, true> { using type = const To; };
 template<typename From, typename To> using copy_cref_t =
     _copy_ref_helper<From, typename _copy_const_helper<From, un_cvref_t<To>>::type>::type;
 
+template<typename From, typename To> using copy_const_t = _copy_const_helper<From, un_cvref_t<To>>::type;
+
 template<typename T> struct _is_ptr_helper     : false_type {};
 template<typename T> struct _is_ptr_helper<T*> : true_type {};
 
diff --git a/asl/base/meta_tests.cpp b/asl/base/meta_tests.cpp
index 7bae295..36b0429 100644
--- a/asl/base/meta_tests.cpp
+++ b/asl/base/meta_tests.cpp
@@ -274,6 +274,7 @@ static_assert(asl::same_or_derived_from<int, int>);
 static_assert(!asl::is_const<int>);
 static_assert(asl::is_const<const int>);
 static_assert(!asl::is_const<const int*>);
+static_assert(!asl::is_const<const int&>);
 static_assert(asl::is_const<int* const>);
 
 static_assert(asl::is_floating_point<float>);
@@ -362,6 +363,15 @@ static_assert(asl::same_as<asl::copy_cref_t<const int&, const float>, const floa
 static_assert(asl::same_as<asl::copy_cref_t<const int&, float&&>, const float&>);
 static_assert(asl::same_as<asl::copy_cref_t<const int&, const float&>, const float&>);
 
+static_assert(asl::same_as<asl::copy_const_t<int, float>, float>);
+static_assert(asl::same_as<asl::copy_const_t<int, const float>, float>);
+
+static_assert(asl::same_as<asl::copy_const_t<const int, float>, const float>);
+static_assert(asl::same_as<asl::copy_const_t<const int, const float>, const float>);
+
+static_assert(asl::same_as<asl::copy_const_t<const int*, float>, float>);
+static_assert(asl::same_as<asl::copy_const_t<int* const, float>, const float>);
+
 static_assert(asl::same_as<asl::decay_t<int>, int>);
 static_assert(!asl::same_as<asl::decay_t<int>, float>);
 static_assert(asl::same_as<asl::decay_t<int&>, int>);
-- 
cgit