Some work on ptr

This commit is contained in:
2024-08-23 20:05:22 +02:00
parent ea795dcccb
commit 19ce24de5e
5 changed files with 117 additions and 1 deletions

View File

@ -2,6 +2,10 @@
namespace asl {
template<typename... Args> struct types {};
struct empty {};
template<typename T> struct id { using type = T; };
template<typename T, T kValue> struct integral_constant { static constexpr T value = kValue; };
@ -29,6 +33,12 @@ template<typename T> auto _as_rref_helper(...) -> id<T>;
template<typename T> using as_lref_t = decltype(_as_lref_helper<T>(0))::type;
template<typename T> using as_rref_t = decltype(_as_rref_helper<T>(0))::type;
template<typename T> struct _un_ref_t { using type = T; };
template<typename T> struct _un_ref_t<T&> { using type = T; };
template<typename T> struct _un_ref_t<T&&> { using type = T; };
template<typename T> using un_ref_t = _un_ref_t<T>::type;
template<typename T, typename... Args> concept constructible = __is_constructible(T, Args...);
template<typename T> concept default_constructible = constructible<T>;
@ -123,4 +133,13 @@ template<typename T, int N> struct _is_array_helper<T[N]> : true_type {};
template<typename T> concept is_array = _is_array_helper<T>::value;
template<typename T>
auto _devoid_helper()
{
if constexpr (is_void<T>) return id<empty>{};
else return id<T>{};
}
template<typename T> using devoid_t = decltype(_devoid_helper<T>())::type;
} // namespace asl