Fixed C++03 compatibility

Updated type_traits generator
This commit is contained in:
John Wellbelove 2025-12-03 09:07:27 +00:00
parent 34abed35b0
commit 3c64940e90
2 changed files with 84 additions and 172 deletions

View File

@ -2569,31 +2569,31 @@ typedef integral_constant<bool, true> true_type;
};
// Plain / cv-qualified
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...)> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) volatile> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const volatile> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...)> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) volatile> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const volatile> : etl::true_type {};
// Variadic
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs..., ...)> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs..., ...)> : etl::true_type {};
// noexcept variants (if supported by the toolchain)
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) volatile noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const volatile noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs..., ...) noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) volatile noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const volatile noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs..., ...) noexcept> : etl::true_type {};
#endif
#if ETL_USING_CPP17
@ -2668,83 +2668,37 @@ typedef integral_constant<bool, true> true_type;
}
template<typename T>
struct is_member_pointer : private_type_traits::is_member_pointer_helper<etl::remove_cv_t<T>> {};
struct is_member_pointer : private_type_traits::is_member_pointer_helper<typename etl::remove_cv<T>::type> {};
#if ETL_USING_CPP17
template <typename T>
inline constexpr bool is_member_pointer_v = etl::is_member_pointer<T>::value;
#endif
#if ETL_USING_CPP11
//***************************************************************************
/// Is T a member function pointer
//***************************************************************************
template <typename T> struct is_member_function_pointer : etl::false_type {};
namespace private_type_traits
{
// Primary: not a member function pointer.
template <typename T>
struct is_member_function_pointer_helper : etl::false_type
{
};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...)> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile> : etl::true_type {};
// If the type is 'TMember TObject::*' then TMember is the member
// Uses etl::is_function<TMember> to detect member function pointers.
template <typename TMember, typename TObject>
struct is_member_function_pointer_helper<TMember TObject::*> : etl::is_function<TMember>
{
};
}
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile noexcept> : etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile &&>: etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile && noexcept>: etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...)> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile> : etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile noexcept> : etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile &&>: etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile && noexcept>: etl::true_type {};
template <typename T>
struct is_member_function_pointer : private_type_traits::is_member_function_pointer_helper<etl::remove_cv_t<T>>
{
};
#endif
#if ETL_USING_CPP17
@ -2752,6 +2706,7 @@ typedef integral_constant<bool, true> true_type;
inline constexpr bool is_member_function_pointer_v = etl::is_member_function_pointer<T>::value;
#endif
#if ETL_USING_CPP11
//***************************************************************************
/// Is T a member object pointer
//***************************************************************************
@ -2768,6 +2723,7 @@ typedef integral_constant<bool, true> true_type;
}
template<typename T> struct is_member_object_pointer : public private_type_traits::is_member_object_pointer_helper<etl::remove_cv_t<T>>::type {};
#endif
#if ETL_USING_CPP17
template <typename T>

View File

@ -2562,31 +2562,31 @@ typedef integral_constant<bool, true> true_type;
};
// Plain / cv-qualified
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...)> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) volatile> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const volatile> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...)> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) volatile> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const volatile> : etl::true_type {};
// Variadic
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs..., ...)> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs..., ...)> : etl::true_type {};
// noexcept variants (if supported by the toolchain)
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) volatile noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs...) const volatile noexcept> : etl::true_type {};
template<typename Ret, typename... TArgs>
struct is_function<Ret(TArgs..., ...) noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) volatile noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs...) const volatile noexcept> : etl::true_type {};
template<typename TReturn, typename... TArgs>
struct is_function<TReturn(TArgs..., ...) noexcept> : etl::true_type {};
#endif
#if ETL_USING_CPP17
@ -2661,83 +2661,37 @@ typedef integral_constant<bool, true> true_type;
}
template<typename T>
struct is_member_pointer : private_type_traits::is_member_pointer_helper<etl::remove_cv_t<T>> {};
struct is_member_pointer : private_type_traits::is_member_pointer_helper<typename etl::remove_cv<T>::type> {};
#if ETL_USING_CPP17
template <typename T>
inline constexpr bool is_member_pointer_v = etl::is_member_pointer<T>::value;
#endif
#if ETL_USING_CPP11
//***************************************************************************
/// Is T a member function pointer
//***************************************************************************
template <typename T> struct is_member_function_pointer : etl::false_type {};
namespace private_type_traits
{
// Primary: not a member function pointer.
template <typename T>
struct is_member_function_pointer_helper : etl::false_type
{
};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...)> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile> : etl::true_type {};
// If the type is 'TMember TObject::*' then TMember is the member
// Uses etl::is_function<TMember> to detect member function pointers.
template <typename TMember, typename TObject>
struct is_member_function_pointer_helper<TMember TObject::*> : etl::is_function<TMember>
{
};
}
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile noexcept> : etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile &&>: etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) volatile && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A...) const volatile && noexcept>: etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...)> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile> : etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile noexcept> : etl::true_type {};
#endif
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile &> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile &&> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile &&>: etl::true_type {};
#if ETL_HAS_NOEXCEPT_FUNCTION_TYPE
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile & noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) volatile && noexcept> : etl::true_type {};
template <typename R, typename C, typename... A> struct is_member_function_pointer<R(C::*)(A..., ...) const volatile && noexcept>: etl::true_type {};
template <typename T>
struct is_member_function_pointer : private_type_traits::is_member_function_pointer_helper<etl::remove_cv_t<T>>
{
};
#endif
#if ETL_USING_CPP17
@ -2745,6 +2699,7 @@ typedef integral_constant<bool, true> true_type;
inline constexpr bool is_member_function_pointer_v = etl::is_member_function_pointer<T>::value;
#endif
#if ETL_USING_CPP11
//***************************************************************************
/// Is T a member object pointer
//***************************************************************************
@ -2761,6 +2716,7 @@ typedef integral_constant<bool, true> true_type;
}
template<typename T> struct is_member_object_pointer : public private_type_traits::is_member_object_pointer_helper<etl::remove_cv_t<T>>::type {};
#endif
#if ETL_USING_CPP17
template <typename T>