stdcxx-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <j...@apache.org>
Subject [jira] Commented: (STDCXX-500) 1 + std::deque::iterator ambiguous without debugging iterators
Date Wed, 12 Mar 2008 23:16:46 GMT

    [ https://issues.apache.org/jira/browse/STDCXX-500?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12578067#action_12578067
] 

Martin Sebor commented on STDCXX-500:
-------------------------------------

No further feedback seems to be forthcoming from the LWG. I'm not sure Concepts will actually
"fix" anything WRT this. We could fix it ourselves as a matter of QoI, for example by adding
another template parameter for the first argument of the operator and constrain it to be an
integer type but that would not only require SFINAE but also change the signature of the function.
We could add a new, similarly constrained overload to the existing function, but that wouldn't
be forward-compatible.

I think the best solution is to file an issue against the C++ standard and defer this ticket
until the issue has been dispatched or until we can afford to break forward compatibility
(i.e., until 4.3).

> 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 <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".

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


Mime
View raw message