From 3417662052975459474
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: f78e5,7eaa8faac8da5016
X-Google-Attributes: gidf78e5,public
From: Valentin Bonnard <Bonnard.V@wanadoo.fr>
Subject: Re: Defect Report: member == in container iterators considered harmful
Date: 1999/08/17
Message-ID: <37B95B96.7F37@wanadoo.fr>#1/1
X-Deja-AN: 513838652
Content-Transfer-Encoding: 7bit
Approved: Valentin Bonnard <bonnard@clipper.ens.fr>
References: <7p4nj8$n3u@enews4.newsguy.com>
X-Original-Date: Tue, 17 Aug 1999 14:54:46 +0200
Content-Type: text/plain; charset=us-ascii
Organization: Ecole normale superieure
X-Auth: PGPMoose V1.1 PGP comp.std.c++ iQBVAwUAN7mE0qwEuYhIxRhxAQGyXwH/XSUVpeSpfVI0rqurCijvNtdrFT++rGVN HTtiNR1cMmrqcBVWXZegj75yJk8Uyft5cZXU643jGYvWTkVQcmVMNg== =14rt
Mime-Version: 1.0
Newsgroups: comp.std.c++

[Note: fowarded to the issue list maintainer]

Darin Adler wrote:

> Some standard containers define iterator classes to fulfill the requirements
> described in 23.1 [lib.container.requirements]. This states that iterator
> must be convertible to const_iterator. However, the following code is not
> guaranteed to work:
> 
>     bool check_equal(std::deque<int>::iterator i,
>         std::deque<int>::const_iterator ci)
>     {
>         return i == ci;
>     }
> 
> The reason for this is that there's no requirement that the == operator be
> defined as a non-member function. 

It's the contrary: as a non member function, deduction 
won't ever work. With member functions, it will work 
sometimes (i == ci is an error, ci == i is ok).

So mandating non member functions certainly:
- isn't a solution
- goes agains the spirit of generic programming

-- 

Valentin Bonnard
---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html              ]



