fmt里判断是否为reference_wrapper

参考:

一窥模板的替换和匹配方式:偏特化的参数比泛化版本的还要多:判断是不是std::pair<,>。-CSDN博客

cpp 复制代码
C:\work\hchx\HchxKernel\PublicAPI\fmt\args.h

template <typename T> struct is_reference_wrapper : std::false_type {};
template <typename T>
struct is_reference_wrapper<std::reference_wrapper<T>> : std::true_type {};

一个引用的地方:

cpp 复制代码
template <typename T>
  using stored_type = conditional_t<detail::is_string<T>::value &&
                                        !has_formatter<T, Context>::value &&
                                        !detail::is_reference_wrapper<T>::value,
                                    std::basic_string<char_type>, T>;

reference_wrapper的定义

cpp 复制代码
template<class _Ty>
	class reference_wrapper
		: public _Weak_types<_Ty>::type
{	// stand-in for an assignable reference
public:
	static_assert(is_object_v<_Ty> || is_function_v<_Ty>,
		"reference_wrapper<T> requires T to be an object type or a function type.");

	using type = _Ty;

	template<class _Uty,
		enable_if_t<conjunction_v<
			negation<is_same<remove_cv_t<remove_reference_t<_Uty>>, reference_wrapper>>,
			_Refwrap_has_ctor_from<_Ty, _Uty>>, int> = 0>
		reference_wrapper(_Uty&& _Val)
			_NOEXCEPT_COND(_NOEXCEPT_OPER(_Refwrap_ctor_fun<_Ty>(_STD declval<_Uty>())))
			{	// construct
			_Ty& _Ref = _STD forward<_Uty>(_Val);
			_Ptr = _STD addressof(_Ref);
			}

	operator _Ty&() const noexcept
		{	// return reference
		return (*_Ptr);
		}

	_NODISCARD _Ty& get() const noexcept
		{	// return reference
		return (*_Ptr);
		}

	template<class... _Types>
		auto operator()(_Types&&... _Args) const
		-> decltype(_STD invoke(get(), _STD forward<_Types>(_Args)...))
		{	// invoke object/function
		return (_STD invoke(get(), _STD forward<_Types>(_Args)...));
		}

private:
	_Ty * _Ptr;
	}
相关推荐
hz_zhangrl17 分钟前
CCF-GESP 等级考试 2025年12月认证C++五级真题解析
c++·算法·青少年编程·gesp·gesp2025年12月·c++五级
leiming61 小时前
c++ 内建函数对象
开发语言·c++·算法
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——存在重复元素
数据结构·c++·算法·力扣·散列表·结构与算法
2301_807288631 小时前
MPRPC项目(第十天,日志功能实现)
开发语言·c++
王老师青少年编程1 小时前
2025年12月GESP(C++五级): 相等序列
c++·算法·gesp·csp·五级·信奥赛·相等序列
王老师青少年编程1 小时前
信奥赛C++提高组csp-s之并查集
数据结构·c++·并查集·csp·信奥赛·csp-s·提高组
初夏睡觉1 小时前
从0开始c++,第2篇之(输出语句)
开发语言·c++·算法
明洞日记1 小时前
【ITK手册001】ITK 架构核心:itk::Object 基类解析与应用指南
c++·图像处理·架构·图形渲染·itk
melonbo1 小时前
std::string::c_str()方法使用不当的问题
c++
im_AMBER1 小时前
Leetcode 96 链表组件
数据结构·c++·笔记·学习·算法·leetcode