1 + std::deque::iterator ambiguous without debugging iterators --------------------------------------------------------------
Key: STDCXX-500 URL: https://issues.apache.org/jira/browse/STDCXX-500 Project: C++ Standard Library Issue Type: Bug Components: 24. Iterators Affects Versions: 4.1.3 Environment: HP aCC 6.0 Reporter: Martin Sebor Moved from Rogue Wave Bugzilla: http://bugzilla.cvo.roguewave.com/show_bug.cgi?id=1923 -------- Original Message -------- Subject: Re: FWD: Peren 6.4 and N + iterator & swap(deque, deque) Date: Mon, 18 Apr 2005 18:12:41 -0700 (PDT) From: Dennis Handly <[EMAIL PROTECTED]> To: [EMAIL PROTECTED], [EMAIL PROTECTED] CC: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED] >From: Dennis Handly <[EMAIL PROTECTED]> >Or use deque directly: template <class _TypeT, class _Allocator> inline typename deque<_TypeT, _Allocator>::iterator operator+(typename deque<_TypeT, _Allocator>::iterator::difference_type __n, typename deque<_TypeT, _Allocator>::iterator __rhs) { return __rhs.operator+(__n); } This didn't work. I need to also have one for const_iterator. And it seems the test is bad: error #2349: no operator "+" matches these operands operand types are: int + std::deque<char, std::allocator<char>>::const_iterator 2+it04 ^ 24(9) says that "n denotes a value of difference type Distance". So that this has to be "2L". Or better yet: ...:iterator::difference_type(2) + it04 Does this seem like something we can get Perennial to change? Boris: Do we know how those other STLs work? Do they have an extra int overloading? ------- Additional Comments From [EMAIL PROTECTED] 2005-04-19 09:30:12 ---- -------- Original Message -------- Subject: Re: FWD: Peren 6.4 and N + iterator & swap(deque, deque) Date: Tue, 19 Apr 2005 10:29:32 -0600 From: Martin Sebor <[EMAIL PROTECTED]> To: Dennis Handly <[EMAIL PROTECTED]> CC: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED] References: <[EMAIL PROTECTED]> Dennis Handly wrote: >>From: Dennis Handly <[EMAIL PROTECTED]> >>Or use deque directly: > > template <class _TypeT, class _Allocator> > inline typename deque<_TypeT, _Allocator>::iterator > operator+(typename deque<_TypeT, _Allocator>::iterator::difference_type __n, > typename deque<_TypeT, _Allocator>::iterator __rhs) > { > return __rhs.operator+(__n); > } > > This didn't work. I need to also have one for const_iterator. > > And it seems the test is bad: > error #2349: no operator "+" matches these operands > operand types are: int + std::deque<char, > std::allocator<char>>::const_iterator > 2+it04 > ^ > > 24(9) says that "n denotes a value of difference type Distance". Ah. That's because the type of 2 is int but deque iterator's distance type (that the iterator's type depends on) is long. Darn! Those templates, they always get you! I'll have to think about this one some more. I created bug 1923 to remind me. > > So that this has to be "2L". Or better yet: > ...:iterator::difference_type(2) + it04 > > Does this seem like something we can get Perennial to change? Strictly speaking I think the test is incorrect. 24.1, p1 says that n (used in Table 76) denotes a value of the difference type Distance, but 2 is not. But as a matter of QoI any integer should work. Martin ------- Additional Comments From [EMAIL PROTECTED] 2005-04-19 09:31:08 ---- Here's the test case: $ cat t.cpp && aCC -AA -V -c t.cpp #include <deque> void foo (std::deque<char>::const_iterator i) { i + 2; 2 + i; } aCC: HP aC++/ANSI C B3910B A.06.00 [Aug 25 2004] "t.cpp", line 6: error #2349: no operator "+" matches these operands operand types are: int + std::deque<char, std::allocator<char>>::const_iterator 2 + i; ^ 1 error detected in the compilation of "t.cpp". -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.