gcc/libstdc++-v3/testsuite/23_containers/vector/70303.cc
François Dumont 33a1e511b5 libstdc++: Make deque iterator operator- usable with value-init iterators
N3644 implies that operator- can be used on value-init iterators. We now return
0 if both iterators are value initialized. If only one is value initialized we
keep the UB by returning the result of a normal computation which is a meaningless
value.

libstdc++-v3/ChangeLog:

	PR libstdc++/70303
	* include/bits/stl_deque.h (std::deque<>::operator-(iterator, iterator)):
	Return 0 if both iterators are value-initialized.
	* testsuite/23_containers/deque/70303.cc: New test.
	* testsuite/23_containers/vector/70303.cc: New test.
2021-02-01 19:19:53 +01:00

68 lines
1.6 KiB
C++

// Copyright (C) 2021 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do run }
#include <vector>
#include <testsuite_hooks.h>
// PR libstdc++/70303
void test01()
{
typedef typename std::vector<int>::iterator It;
It it = It();
VERIFY(it == it);
VERIFY(!(it != it));
VERIFY(it - it == 0);
VERIFY(!(it < it));
VERIFY(!(it > it));
VERIFY(it <= it);
VERIFY(it >= it);
typedef typename std::vector<int>::const_iterator CIt;
CIt cit = CIt();
VERIFY(cit == cit);
VERIFY(!(cit != cit));
VERIFY(cit - cit == 0);
VERIFY(!(cit < cit));
VERIFY(!(cit > cit));
VERIFY(cit <= cit);
VERIFY(cit >= cit);
VERIFY(it == cit);
VERIFY(!(it != cit));
VERIFY(cit == it);
VERIFY(!(cit != it));
VERIFY(it - cit == 0);
VERIFY(cit - it == 0);
VERIFY(!(it < cit));
VERIFY(!(it > cit));
VERIFY(it <= cit);
VERIFY(it >= cit);
VERIFY(!(cit < it));
VERIFY(!(cit > it));
VERIFY(cit <= it);
VERIFY(cit >= it);
}
int main()
{
test01();
return 0;
}