我遇到了一个编译错误,希望编译器隐式使用自定义的左值引用运算符而不是赋值运算符。
我已经生成了一个最小可重现的示例来展示这种现象。有人能解释一下这里发生了什么,并可能提供允许调用隐式左值引用运算符的方法吗?
如果取消注释赋值运算符删除,则无法编译:
#include <iostream>
template <typename T>
struct wrapper
{
private:
T t;
public:
wrapper( T _t ) : t( _t ) {}
// wrapper<T> operator=( T ) = delete;
operator const T&() const { return t; }
operator T&() { return t; }
};
int main()
{
wrapper<int> w( 0 );
std::cout << w << std::endl;
w = 1;
std::cout << w << std::endl;
}
w = 1
始终意味着w.operator=(1)
。 - Artyer