From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 3B64B38485BC; Thu, 21 Apr 2022 15:33:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3B64B38485BC MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r11-9923] libstdc++: Fix test that fails in C++20 mode X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 15798c5d50f1318fcc0c0e7b0e71281f9a38433c X-Git-Newrev: 47b67521d457cbf07dd60be3d0fdc8c41a14c962 Message-Id: <20220421153340.3B64B38485BC@sourceware.org> Date: Thu, 21 Apr 2022 15:33:40 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Apr 2022 15:33:40 -0000 https://gcc.gnu.org/g:47b67521d457cbf07dd60be3d0fdc8c41a14c962 commit r11-9923-g47b67521d457cbf07dd60be3d0fdc8c41a14c962 Author: Jonathan Wakely Date: Fri Nov 26 22:53:02 2021 +0000 libstdc++: Fix test that fails in C++20 mode This test was written to verify that the LWG 3265 changes work. But those changes were superseded by LWG 3435, and the test is now incorrect according to the current draft. The assignment operator is now constrained to also require convertibility, which makes the test fail. Change the Iter type to be convertible from int*, but make it throw an exception if that conversion is used. Change the test from compile-only to run, so we verify that the exception isn't thrown. libstdc++-v3/ChangeLog: * testsuite/24_iterators/move_iterator/dr3265.cc: Fix test to account for LWG 3435 resolution. (cherry picked from commit 52b769437a4d1ca50f4ef5bdad65b12115ded845) Diff: --- .../testsuite/24_iterators/move_iterator/dr3265.cc | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc index e4219b8c78b..3ce0df5d111 100644 --- a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc +++ b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // . -// { dg-do compile { target c++11 } } +// { dg-do run { target c++11 } } #include @@ -27,18 +27,18 @@ struct Iter using reference = int&; using difference_type = std::ptrdiff_t; - Iter(); + Iter() { } - // Construction from int* is not valid: - Iter(int*) = delete; + // Construction from int* should not be used: + Iter(int*) { throw 1; } - // Assignment from int* is valid: - Iter& operator=(int*); + // Assignment from int* is OK: + Iter& operator=(int*) { return *this; } - Iter& operator++(); - Iter operator++(int); - int& operator*() const; - int* operator->() const; + Iter& operator++() { return *this; } + Iter operator++(int) { return *this; } + int& operator*() const { static int i; return i; } + int* operator->() const { return &**this; } template friend bool operator==(Iter, Iter); }; @@ -49,3 +49,8 @@ void test01() int i = 0; m = std::make_move_iterator(&i); // Should use assignment not construction } + +int main() +{ + test01(); +}