考虑以下代码:
int v = 12;
std::reference_wrapper<int> x(v);
std::reference_wrapper<const int> y(x); // (1) This works
std::reference_wrapper<const int> z = x; // (2) This fails
如果我理解正确,(1)有效,因为它只需要一次用户转换,(2)失败,因为它涉及转换序列中的两次用户转换:
std::reference_wrapper<int>::operator int& and
std::reference_wrapper<const int>::(const int&)
因此,std::reference_wrapper<int>
不是隐式可转换到std::reference_wrapper<const int>
,这会破坏我使用std::is_convertible
特征的部分代码。
这个设计是否有任何理由涉及不存在通用复制构造函数:
template <typename Y>
reference_wrapper<T>::reference_wrapper(const reference_wrapper<Y>&)
(就像在std::shared_ptr
中那样)会允许这种隐式转换吗?
答案 0 :(得分:0)
std::reference_wrapper
与其基础类型之间没有隐式自动转换(因为它可能不安全且令人困惑)。
正确的语法应该是:
std::reference_wrapper<const int> z = x.get();