[RFC] So, which is the correct type of _M_*_end - _M_*_cur?

Paolo Carlini pcarlini@unitus.it
Tue Apr 29 20:00:00 GMT 2003


Nathan Myers wrote:

>On Tue, Apr 29, 2003 at 07:46:44PM +0200, Paolo Carlini wrote:
>
>>reading and re-reading this code I noticed another minor
>>inconsistency.
>>
>>     size_t __buf_len = _M_in_end - _M_in_cur;
>>
>>whereas, in the latter:
>>
>>     off_type __buf_len = _M_out_end - _M_out_cur;
>>
>>Which one is right???
>>
>If you know that one pointer is more than the other (e.g. because
>of a prior comparison, or because the invariants say you can assume 
>it) then you should use size_t.  In this case there is no such 
>invariant, so you should use ptrdiff_t, and using size_t is actually
>wrong.  (The __copy_streambufs code I showed you has this mistake.)  
>
But what about off_type, which is (for the accidental list reader ;)

  template<typename _CharT, typename _Traits>
    class basic_streambuf
    {
    public:
      typedef typename traits_type::off_type  off_type;

???

Paolo.



More information about the Libstdc++ mailing list