class receiverObj : public x::outputrefiteratorObj<int> { // ... void operator=(int c) override; }; outputrefiterator<int> iter=x::refiterator<receiverObj>::create();
      x::outputrefiteratorObj
      defines shims for an output iterator over the class given as a template
      parameter. x::outputrefiteratorObj defines
      the operator++() and operator*()
      shims, and a virtual operator=() which gets
      defined in a subclass.
    
      x::outputrefiterator<
      defines a reference-counted iterator to an
      T>x::outputrefiteratorObj<.
      There's also an
      T>x::outputrefiteratorptr<;
      as well as
      T>x::const_outputrefiterator<
      and
      T>x::const_outputrefiteratorptr<
      (marginally useful, since
      T>x::outputrefiteratorObj<
      does not have any T>const methods).
    
      This allows non template-based implementations based on
      x::outputrefiterator<
      to operate on any reference-counted output iterator implemented by a
      T>x::outputrefiteratorObj<
      subclass, with the trade-off of less-optimized code that uses
      virtual function calls, in place of potential optimizations involving
      iterating of the assignment operator.
    T>