From patchwork Thu Oct 21 14:37:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 46502 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D71CC3858434 for ; Thu, 21 Oct 2021 14:40:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D71CC3858434 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1634827232; bh=0GnOXdSoHtHLUtkeuu/aBiyM9saDYqFfa/Rd4dgbt8g=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=CU7dJOCnEGGyI3zcrr5yUaxoKF/dDTaVJYlnojc8UAVTph75GD4JfhswO6WtJS3SX 954QQQRhjsBeh1NHSIMPbmyRMjCNyBkPLMsqEYZUfTU9ek4UfH0aX7100mbqyA1OFu JjuS1DBzC8H2R+jBzq4OhLj11tdTf0B5lmNLRhno= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 904A83857C5B for ; Thu, 21 Oct 2021 14:37:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 904A83857C5B Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-136-3kkEI4-KOqCsOlNbTL3Wdg-1; Thu, 21 Oct 2021 10:37:45 -0400 X-MC-Unique: 3kkEI4-KOqCsOlNbTL3Wdg-1 Received: by mail-qv1-f70.google.com with SMTP id x16-20020a0cfe10000000b003834102a98cso1113565qvr.9 for ; Thu, 21 Oct 2021 07:37:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=0GnOXdSoHtHLUtkeuu/aBiyM9saDYqFfa/Rd4dgbt8g=; b=JJ27bLeVwAuZ05UmSM0CuP15VJcJk1GVg6XvzFtol5EKlcffMHnpsyjd97NSlj0GBT 7ZSsIFuKLNVJ+w5/A1M64qYmpeyik5DpCIZ+xCnd8ObttI6I/Y8QtOvJjlRGBTP9Hl3t WBlKVt1t2bxVTTvysOdjmbjqmpXg7wMgnd53I3CKw6nNK/X6mWebMexV+CdKFtniP1f6 7ms235hcbIRvMiJQYbW3QTT1XjePeX1dNAj99mHD/UWFr1TSpPpz7dbfcVsgI5w/B1mS lQjsIqS62dYfSJg0Vg3qn/lju+sqZkCCgb+viaRb3SrbHnHYMV0sAmmSLkuUkfQ9e6pN xTEg== X-Gm-Message-State: AOAM530sHrG5PkD45GSHspZXmkvewtjzyqXHU09ydq/tHJQVLHaOBgKC w9kxxtpNSnc5V+aK4GMB4OhTx4M7DswRLM/f4FHLjW5tgeLJAZVu/I7HdW2unI2fb9fEWZRreFK F1rWUtjCxY0Z0WveTL2JAlbU8vYm9cs/KhKJS8/tMEOAQ8cllawm8uESINtivg02jxKk= X-Received: by 2002:a37:6551:: with SMTP id z78mr4660942qkb.96.1634827064442; Thu, 21 Oct 2021 07:37:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzaIdjhzQjEptC/ddQ2BRq+Lvdy/K1MXhSbiVi/+SHt+TnM3eHP9Leap97p/D014MffeduWjw== X-Received: by 2002:a37:6551:: with SMTP id z78mr4660930qkb.96.1634827064215; Thu, 21 Oct 2021 07:37:44 -0700 (PDT) Received: from localhost.localdomain (ool-457d493a.dyn.optonline.net. [69.125.73.58]) by smtp.gmail.com with ESMTPSA id i13sm2959541qko.70.2021.10.21.07.37.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Oct 2021 07:37:43 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] libstdc++: Implement P2432R1 changes for views::istream Date: Thu, 21 Oct 2021 10:37:28 -0400 Message-Id: <20211021143728.2107631-1-ppalka@redhat.com> X-Mailer: git-send-email 2.33.1.711.g9d530dc002 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-15.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Cc: libstdc++@gcc.gnu.org Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Tested on x86_64-pc-linux-gnu, does this look OK for trunk/11/10? libstdc++-v3/ChangeLog: * include/std/ranges (istream_view): Replace this function template with an alias template as per P2432R1. (wistream_view): Define as per P2432R1. (views::_Istream, views::istream): Likewise. * testsuite/std/ranges/istream_view.cc (test07): New test. --- libstdc++-v3/include/std/ranges | 25 ++++++++++++++++--- .../testsuite/std/ranges/istream_view.cc | 13 ++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 30ba0606869..7aa0f9dfc67 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -781,10 +781,27 @@ namespace views friend _Iterator; }; - template - basic_istream_view<_Val, _CharT, _Traits> - istream_view(basic_istream<_CharT, _Traits>& __s) - { return basic_istream_view<_Val, _CharT, _Traits>{__s}; } + template + using istream_view = basic_istream_view<_Val, char>; + + template + using wistream_view = basic_istream_view<_Val, wchar_t>; + +namespace views +{ + template + struct _Istream + { + template + [[nodiscard]] + constexpr auto + operator()(basic_istream<_CharT, _TraitsT>& __e) const + { return basic_istream_view<_Tp, _CharT, _TraitsT>(__e); } + }; + + template + inline constexpr _Istream<_Tp> istream; +} // C++20 24.7 [range.adaptors] Range adaptors diff --git a/libstdc++-v3/testsuite/std/ranges/istream_view.cc b/libstdc++-v3/testsuite/std/ranges/istream_view.cc index f5c0c2a6bb0..ea7c5a35ef7 100644 --- a/libstdc++-v3/testsuite/std/ranges/istream_view.cc +++ b/libstdc++-v3/testsuite/std/ranges/istream_view.cc @@ -103,6 +103,18 @@ test06() static_assert( std::is_same_v ); } +void +test07() +{ + // P2432R1, views::istream + auto nums = std::istringstream("0 1 2 3 4"); + ranges::istream_view v(nums); + int sum = 0; + for (int val : views::istream(nums)) + sum += val; + VERIFY( sum == 10 ); +} + int main() { @@ -112,4 +124,5 @@ main() test04(); test05(); test06(); + test07(); }