
template <typename Derived, typename Rhs>
Derived &operator>>=(BinopsBase<Derived> &lhs, Rhs const &rhs)
{
    Derived tmp{ Derived{der(lhs)} >>= rhs };
    tmp.swap(der(lhs));
    return der(lhs);
}

template <typename Derived, typename Rhs>
Derived operator>>(BinopsBase<Derived> &&lhs, Rhs const &rhs)
{
    return der(std::move(lhs)) >>= rhs;
}

template <typename Derived, typename Rhs>
Derived operator>>(BinopsBase<Derived> const &lhs, Rhs const &rhs)
{
    return Derived{der(lhs)} >>= rhs;
}
