4.3.0/include/c++/bits/boost_concept_check.h - RandomAccessIteratorConcept Concept check ambiguous

Alexey Bulavitsky alexey_bulavitsky@ocslab.com
Wed May 28 11:09:00 GMT 2008


we  have ambiguous requirement
see:

template <class _Tp>
  struct _RandomAccessIteratorConcept
  {
    void __constraints() {
      __function_requires< _BidirectionalIteratorConcept<_Tp> >();
      __function_requires< _ComparableConcept<_Tp> >();
      __function_requires< _ConvertibleConcept<
        typename std::iterator_traits<_Tp>::iterator_category,
        std::random_access_iterator_tag> >();
      // ??? We don't use _Ref, are we just checking for "referenceability"?
      typedef typename std::iterator_traits<_Tp>::reference _Ref;

      __i += __n;                       // require assignment addition 
operator
      __i = __i + __n; // require addition with difference type


      //__i = __n + __i;     !!!!!!!!!!!!!!! ambiguous !!!!!!!!!!!!!!! 
           


     __i = __i - __n;                  // require subtraction with
                                                //            difference 
type
      __n = __i - __j;                  // require difference operator
      (void)__i[__n];                   // require element access operator
    }
    _Tp __a, __b;
    _Tp __i, __j;
    typename std::iterator_traits<_Tp>::difference_type __n;
  };

what type expression __n + __i; must has ? 
std::iterator_traits<_Tp>::difference_type  or _Tp ?
what operator+ compiler must and can use ?

best regards
Bulavitsky Alexey




More information about the Gcc-bugs mailing list