Some work on ptr
This commit is contained in:
19
asl/meta.hpp
19
asl/meta.hpp
@ -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
|
||||
|
Reference in New Issue
Block a user