MSVC源码阅读笔记1 - xtr1common.h-CSDN博客
以后可能使用到的一些细节,如果使用会链接过来查看。
_Apply
template <class _Ty>
struct remove_cv {
using type = _Ty;
template <template <class> class _Fn>
using _Apply = _Fn<_Ty>;
};
template <class _Ty>
struct remove_cv<const _Ty> {
using type = _Ty;
template <template <class> class _Fn>
using _Apply = const _Fn<_Ty>;
};
template <class _Ty>
struct remove_cv<volatile _Ty> {
using type = _Ty;
template <template <class> class _Fn>
using _Apply = volatile _Fn<_Ty>;
};
template <class _Ty>
struct remove_cv<const volatile _Ty> {
using type = _Ty;
template <template <class> class _Fn>
using _Apply = const volatile _Fn<_Ty>;
};
_Const_thru_ref,_Remove_cvref_t
template <class _Ty>
struct remove_reference {
using type = _Ty;
using _Const_thru_ref_type = const _Ty;
};
template <class _Ty>
struct remove_reference<_Ty&> {
using type = _Ty;
using _Const_thru_ref_type = const _Ty&;
};
template <class _Ty>
struct remove_reference<_Ty&&> {
using type = _Ty;
using _Const_thru_ref_type = const _Ty&&;
};
template <class _Ty>
using remove_reference_t = typename remove_reference<_Ty>::type;
template <class _Ty>
using _Const_thru_ref = typename remove_reference<_Ty>::_Const_thru_ref_type;
template <class _Ty>
using _Remove_cvref_t = remove_cv_t<remove_reference_t<_Ty>>;
template <class _Ty>
using remove_cvref_t = _Remove_cvref_t<_Ty>;
is_constant_evaluated
[[nodiscard]] constexpr bool is_constant_evaluated() noexcept {
return __builtin_is_constant_evaluated();
}
检测函数调用是否在常量计算的上下文中发生。