Expand description
An escape hatch for implementing ops traits for references to newtypes.
As of Rust 1.72.1, the following code does not compile:
ⓘ
use core::ops::Neg;
struct A<T>(T);
impl<'a, T> Neg for &'a A<T>
where
&'a T: Neg,
{
type Output = A<<&'a T as Neg>::Output>;
fn neg(self) -> Self::Output {
A(-&self.0)
}
}
fn f<T>(a: T)
where
for<'a> &'a T: Neg,
{
let minus_a = -&a;
// to do something with `a` and `minus_a`
}
fn g<T>(a: T)
where
for<'a> &'a T: Neg,
{
f(a);
}but the following code does:
use core::ops::Neg;
use ref_ops::RefNeg;
struct A<T>(T);
impl<T> Neg for &A<T>
where
T: RefNeg,
{
type Output = A<T::Output>;
fn neg(self) -> Self::Output {
A(self.0.ref_neg())
}
}
fn f<T>(a: T)
where
for<'a> &'a T: Neg,
{
let minus_a = -&a;
// to do something with `a` and `minus_a`
}
fn g<T>(a: T)
where
for<'a> &'a T: Neg,
{
f(a);
}Traits
addoperation through references.bitandoperation through references.bitoroperation through references.bitxoroperation through references.divoperation through references.muloperation through references.addoperation through mutable references.bitandoperation through mutable references.bitoroperation through mutable references.bitxoroperation through mutable references.divoperation through mutable references.muloperation through mutable references.negoperation through mutable references.notoperation through mutable references.remoperation through mutable references.shloperation through mutable references.shroperation through mutable references.suboperation through mutable references.negoperation through references.notoperation through references.remoperation through references.shloperation through references.shroperation through references.suboperation through references.