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