我看不出它有什么不同。
我想添加&
-qualifier 比删除它更容易std::remove_reference
?
事实上,这可能是原因:在裸类型上进行进一步的类型组合比始终处理 const/volatile/ref 限定要容易得多。参见例如这种用法:
template<typename Class, typename TypeIn, typename TypeOut>
struct is_cnv<Class, TypeIn, TypeOut, typename enable_if<is_class<Class>, void>::type>
{
typedef typename ::boost::unwrap_reference<Class>::type class_type;
typedef void signature_type(TypeIn const&, optional<TypeOut>&);
BOOST_DECLARE_IS_CALLABLE(is_callable, operator());
BOOST_STATIC_CONSTANT(bool, value = (is_callable<class_type, signature_type>::value));
};
(即在 中convert/detail/is_converter.hpp
,是少数几个真正使用unwrap_reference
from 特征的地方之一boost/core/ref.hpp
)
因为我们知道class_type
它不是 ref-qualified,所以更容易输入它is_callable
并且不会感到惊讶。