
template <class 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 <class Derived, typename Rhs>
Derived operator<<(BinopsBase<Derived> &&lhs, Rhs const &rhs)
{
    return der(std::move(lhs)) <<= rhs;
}

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

