You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2008/03/11 23:28:50 UTC

[jira] Updated: (STDCXX-500) 1 + std::deque::iterator ambiguous without debugging iterators

     [ https://issues.apache.org/jira/browse/STDCXX-500?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Sebor updated STDCXX-500:
--------------------------------

    Priority: Minor  (was: Major)

Lowering Priority since it ??appears?? that our behavior is not in violation of the requirements of the current standard. If this is, in fact, confirmed I think the appropriate way to handle this issue will be to defer it until the standard is clarified. It's also not clear to me that the issue can be fixed in a backward-compatible manner.

> 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, 4.2.0
>         Environment: HP aCC 6.0
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>            Priority: Minor
>             Fix For: 4.2.1
>
>   Original Estimate: 8h
>  Remaining Estimate: 8h
>
> 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 <dh...@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 <dh...@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 <se...@roguewave.com>
> To: Dennis Handly <dh...@cup.hp.com>
> CC: Boris.Gubenko@hp.com,  mahesha@india.hp.com,  sgganesh@india.hp.com
> References: <20...@hpcll183.cup.hp.com>
> Dennis Handly wrote:
> >>From: Dennis Handly <dh...@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".

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.