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

Reply via email to