Issue Details (XML | Word | Printable)

Key: STDCXX-500
Type: Bug Bug
Status: Open Open
Priority: Minor Minor
Assignee: Martin Sebor
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

1 + std::deque::iterator ambiguous without debugging iterators

Created: 24/Jul/07 05:31 PM   Updated: 12/Mar/08 11:18 PM
Return to search
Component/s: 24. Iterators
Affects Version/s: 4.1.2, 4.1.3, 4.1.4, 4.2.0
Fix Version/s: 4.3.0

Time Tracking:
Original Estimate: 8h
Original Estimate - 8h
Remaining Estimate: 6h
Time Spent - 2h Remaining Estimate - 6h
Time Spent: 2h
Time Spent - 2h Remaining Estimate - 6h

Environment: HP aCC 6.0

Severity: Compiler Error


 Description  « Hide
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 <dhandly@cup.hp.com>
To: dhandly@cup.hp.com, sebor@roguewave.com
CC: Boris.Gubenko@hp.com, mahesha@india.hp.com, sgganesh@india.hp.com

>From: Dennis Handly <dhandly@cup.hp.com>
>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 sebor@roguewave.com 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 <sebor@roguewave.com>
To: Dennis Handly <dhandly@cup.hp.com>
CC: Boris.Gubenko@hp.com, mahesha@india.hp.com, sgganesh@india.hp.com
References: <200504190112.SAA17097@hpcll183.cup.hp.com>

Dennis Handly wrote:
>>From: Dennis Handly <dhandly@cup.hp.com>
>>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 sebor@roguewave.com 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".



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Martin Sebor logged work - 11/Mar/08 09:00 PM
Time Worked: 2h
Investigated, discussed.