get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812651/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812651,
    "url": "http://patchwork.ozlabs.org/api/patches/812651/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20170911214846.GA8159@redhat.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170911214846.GA8159@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-11T21:48:46",
    "name": "PR libstdc++/70483 make std::string_view fully constexpr",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d262431d8e6b946e9135f1e5ae605801ebc01fbb",
    "submitter": {
        "id": 48004,
        "url": "http://patchwork.ozlabs.org/api/people/48004/?format=api",
        "name": "Jonathan Wakely",
        "email": "jwakely@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20170911214846.GA8159@redhat.com/mbox/",
    "series": [
        {
            "id": 2588,
            "url": "http://patchwork.ozlabs.org/api/series/2588/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=2588",
            "date": "2017-09-11T21:48:46",
            "name": "PR libstdc++/70483 make std::string_view fully constexpr",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/2588/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/812651/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812651/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<gcc-patches-return-461872-incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "mailing list gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461872-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"FZ/szBG0\"; dkim-atps=neutral",
            "sourceware.org; auth=none",
            "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=jwakely@redhat.com"
        ],
        "Received": [
            "from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xrhQc6Plcz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 07:49:12 +1000 (AEST)",
            "(qmail 25647 invoked by alias); 11 Sep 2017 21:48:59 -0000",
            "(qmail 25489 invoked by uid 89); 11 Sep 2017 21:48:57 -0000",
            "from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tMon, 11 Sep 2017 21:48:49 +0000",
            "from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com\n\t[10.5.11.11])\t(using TLSv1.2 with cipher AECDH-AES256-SHA\n\t(256/256 bits))\t(No client certificate requested)\tby\n\tmx1.redhat.com (Postfix) with ESMTPS id C5EE8C0272D3;\n\tMon, 11 Sep 2017 21:48:47 +0000 (UTC)",
            "from localhost (unknown [10.33.36.109])\tby smtp.corp.redhat.com\n\t(Postfix) with ESMTP id 0F92F60317;\n\tMon, 11 Sep 2017 21:48:46 +0000 (UTC)"
        ],
        "DomainKey-Signature": "a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:message-id:mime-version:content-type; q=dns; s=\n\tdefault; b=nM9/mQfgVzlwck5l5j4HXLARfa5ISWSVKWgOg5RfUn/wRttWQ5yHD\n\tfiQD3AAVQ/V+lHjrzD25X+ERImAh8Uq/juimXQU7iZwegpFSY0wPffY7QIKOF9LZ\n\tTux3qQ1papDgpMzuX/SUz5DfBijzmP2kr+32weXhnSSnXNRQexC55c=",
        "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:subject:message-id:mime-version:content-type; s=\n\tdefault; bh=tsTWzbg772umnwExUI59QQ2Ntow=; b=FZ/szBG0J3wQMhW1qcOj\n\tWbTa6oyKFwtsZ9EGNK96qSCdhcHzNP0sD8Prd8uiIRufU4j0hTKAe3VLLSWkE16E\n\tPXeK6eWqFPfr0xgBqytG9zorDX99UcgaZGPqgyXJL1mVSwm6bU6wK3nlCYOtT7QS\n\tFgDUL+QgJlqDUlaMMBzGMlM=",
        "Mailing-List": "contact gcc-patches-help@gcc.gnu.org; run by ezmlm",
        "Precedence": "bulk",
        "List-Id": "<gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "List-Archive": "<http://gcc.gnu.org/ml/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-help@gcc.gnu.org>",
        "Sender": "gcc-patches-owner@gcc.gnu.org",
        "X-Virus-Found": "No",
        "X-Spam-SWARE-Status": "No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0,\n\tGIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD,\n\tSPF_HELO_PASS autolearn=ham version=3.3.2 spammy=rica, lone,\n\tcruz, ux",
        "X-Spam-User": "qpsmtpd, 2 recipients",
        "X-HELO": "mx1.redhat.com",
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com C5EE8C0272D3",
        "Date": "Mon, 11 Sep 2017 22:48:46 +0100",
        "From": "Jonathan Wakely <jwakely@redhat.com>",
        "To": "libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org",
        "Subject": "[PATCH] PR libstdc++/70483 make std::string_view fully constexpr",
        "Message-ID": "<20170911214846.GA8159@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "multipart/mixed; boundary=\"k1lZvvs/B4yU6o8G\"",
        "Content-Disposition": "inline",
        "X-Clacks-Overhead": "GNU Terry Pratchett",
        "User-Agent": "Mutt/1.8.3 (2017-05-23)"
    },
    "content": "This adds 'constexpr' everywhere it's missing from\nstd::basic_string_view.\n\n\tPR libstdc++/70483\n\t* include/bits/string_view.tcc (basic_string_view::find)\n\t(basic_string_view::rfind, basic_string_view::find_first_of)\n\t(basic_string_view::find_last_of, basic_string_view::find_first_not_of)\n\t(basic_string_view::find_last_not_of): Add constexpr specifier.\n\t* include/std/string_view (basic_string_view::operator=)\n\t(basic_string_view::rbegin, basic_string_view::rend)\n\t(basic_string_view::crbegin, basic_string_view::crend)\n\t(basic_string_view::remove_prefix, basic_string_view::remove_suffix)\n\t(basic_string_view::swap, basic_string_view::compare)\n\t(basic_string_view::find, basic_string_view::rfind)\n\t(basic_string_view::find_first_of, basic_string_view::find_last_of)\n\t(basic_string_view::find_first_not_of)\n\t(basic_string_view::find_last_not_of, basic_string_view::_M_check)\n\t(basic_string_view::_M_limit, operator==, operator!=, operator<)\n\t(operator>, operator<=, operator>=): Likewise.\n\t* testsuite/21_strings/basic_string_view/modifiers/remove_prefix/\n\tchar/1.cc: Repeat tests in constexpr context.\n\t* testsuite/21_strings/basic_string_view/modifiers/remove_prefix/\n\twchar_t/1.cc: Likewise.\n\t* testsuite/21_strings/basic_string_view/modifiers/remove_suffix/\n\tchar/1.cc: Likewise.\n\t* testsuite/21_strings/basic_string_view/modifiers/remove_suffix/\n\twchar_t/1.cc: Likewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/char/1.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/char/2.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/char/3.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operators/char/2.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/range_access/char/1.cc: Test\n\tcbegin, cend, rbegin, rend, crbegin and crend.\n\t* testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc:\n\tLikewise.\n\t* testsuite/21_strings/basic_string_view/operations/compare/char/1.cc:\n\tRemove trailing whitespace.\n\t* testsuite/21_strings/basic_string_view/operations/compare/wchar_t/\n\t1.cc: Likewise.\n\t* testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc:\n\tNew.\n\t* testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc:\n\tNew.\n\t* testsuite/21_strings/basic_string_view/operations/compare/char/2.cc:\n\tNew.\n\t* testsuite/21_strings/basic_string_view/operations/compare/wchar_t/\n\t2.cc: New.\n\nTested powerpc64le-linux, committed to trunk.\ncommit 280c8e2870fc50a27a174a1b0fdb9d2a4d0a8d28\nAuthor: Jonathan Wakely <jwakely@redhat.com>\nDate:   Mon Sep 11 22:03:23 2017 +0100\n\n    PR libstdc++/70483 make std::string_view fully constexpr\n    \n            PR libstdc++/70483\n            * include/bits/string_view.tcc (basic_string_view::find)\n            (basic_string_view::rfind, basic_string_view::find_first_of)\n            (basic_string_view::find_last_of, basic_string_view::find_first_not_of)\n            (basic_string_view::find_last_not_of): Add constexpr specifier.\n            * include/std/string_view (basic_string_view::operator=)\n            (basic_string_view::rbegin, basic_string_view::rend)\n            (basic_string_view::crbegin, basic_string_view::crend)\n            (basic_string_view::remove_prefix, basic_string_view::remove_suffix)\n            (basic_string_view::swap, basic_string_view::compare)\n            (basic_string_view::find, basic_string_view::rfind)\n            (basic_string_view::find_first_of, basic_string_view::find_last_of)\n            (basic_string_view::find_first_not_of)\n            (basic_string_view::find_last_not_of, basic_string_view::_M_check)\n            (basic_string_view::_M_limit, operator==, operator!=, operator<)\n            (operator>, operator<=, operator>=): Likewise.\n            * testsuite/21_strings/basic_string_view/modifiers/remove_prefix/\n            char/1.cc: Repeat tests in constexpr context.\n            * testsuite/21_strings/basic_string_view/modifiers/remove_prefix/\n            wchar_t/1.cc: Likewise.\n            * testsuite/21_strings/basic_string_view/modifiers/remove_suffix/\n            char/1.cc: Likewise.\n            * testsuite/21_strings/basic_string_view/modifiers/remove_suffix/\n            wchar_t/1.cc: Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/char/1.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/char/2.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/char/3.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operators/char/2.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/range_access/char/1.cc: Test\n            cbegin, cend, rbegin, rend, crbegin and crend.\n            * testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc:\n            Likewise.\n            * testsuite/21_strings/basic_string_view/operations/compare/char/1.cc:\n            Remove trailing whitespace.\n            * testsuite/21_strings/basic_string_view/operations/compare/wchar_t/\n            1.cc: Likewise.\n            * testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc:\n            New.\n            * testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc:\n            New.\n            * testsuite/21_strings/basic_string_view/operations/compare/char/2.cc:\n            New.\n            * testsuite/21_strings/basic_string_view/operations/compare/wchar_t/\n            2.cc: New.",
    "diff": "diff --git a/libstdc++-v3/include/bits/string_view.tcc b/libstdc++-v3/include/bits/string_view.tcc\nindex f4bd50fd4a0..b8ab78cedf1 100644\n--- a/libstdc++-v3/include/bits/string_view.tcc\n+++ b/libstdc++-v3/include/bits/string_view.tcc\n@@ -45,7 +45,7 @@ namespace std _GLIBCXX_VISIBILITY(default)\n _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find(const _CharT* __str, size_type __pos, size_type __n) const noexcept\n     {\n@@ -66,7 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find(_CharT __c, size_type __pos) const noexcept\n     {\n@@ -82,7 +82,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept\n     {\n@@ -102,7 +102,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     rfind(_CharT __c, size_type __pos) const noexcept\n     {\n@@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_first_of(const _CharT* __str, size_type __pos, size_type __n) const\n     {\n@@ -135,7 +135,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_last_of(const _CharT* __str, size_type __pos, size_type __n) const\n     {\n@@ -156,7 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const\n     {\n@@ -168,7 +168,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_first_not_of(_CharT __c, size_type __pos) const noexcept\n     {\n@@ -179,7 +179,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const\n     {\n@@ -200,7 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     }\n \n   template<typename _CharT, typename _Traits>\n-    typename basic_string_view<_CharT, _Traits>::size_type\n+    constexpr typename basic_string_view<_CharT, _Traits>::size_type\n     basic_string_view<_CharT, _Traits>::\n     find_last_not_of(_CharT __c, size_type __pos) const noexcept\n     {\ndiff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view\nindex 88a7686618c..d766b75f9a7 100644\n--- a/libstdc++-v3/include/std/string_view\n+++ b/libstdc++-v3/include/std/string_view\n@@ -106,7 +106,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n         _M_str{__str}\n       { }\n \n-      basic_string_view&\n+      constexpr basic_string_view&\n       operator=(const basic_string_view&) noexcept = default;\n \n       // [string.view.iterators], iterators\n@@ -127,19 +127,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       cend() const noexcept\n       { return this->_M_str + this->_M_len; }\n \n-      const_reverse_iterator\n+      constexpr const_reverse_iterator\n       rbegin() const noexcept\n       { return const_reverse_iterator(this->end()); }\n \n-      const_reverse_iterator\n+      constexpr const_reverse_iterator\n       rend() const noexcept\n       { return const_reverse_iterator(this->begin()); }\n \n-      const_reverse_iterator\n+      constexpr const_reverse_iterator\n       crbegin() const noexcept\n       { return const_reverse_iterator(this->end()); }\n \n-      const_reverse_iterator\n+      constexpr const_reverse_iterator\n       crend() const noexcept\n       { return const_reverse_iterator(this->begin()); }\n \n@@ -208,7 +208,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \n       // [string.view.modifiers], modifiers:\n \n-      void\n+      constexpr void\n       remove_prefix(size_type __n)\n       {\n \t__glibcxx_assert(this->_M_len >= __n);\n@@ -216,15 +216,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \tthis->_M_len -= __n;\n       }\n \n-      void\n+      constexpr void\n       remove_suffix(size_type __n)\n       { this->_M_len -= __n; }\n \n-      void\n+      constexpr void\n       swap(basic_string_view& __sv) noexcept\n       {\n-\tstd::swap(this->_M_len, __sv._M_len);\n-\tstd::swap(this->_M_str, __sv._M_str);\n+\tauto __tmp = *this;\n+\t*this = __sv;\n+\t__sv = __tmp;\n       }\n \n \n@@ -261,7 +262,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t\t\t\t     __pos, this->size()), basic_string_view{});\n       }\n \n-      int\n+      constexpr int\n       compare(basic_string_view __str) const noexcept\n       {\n \tint __ret = traits_type::compare(this->_M_str, __str._M_str,\n@@ -271,24 +272,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \treturn __ret;\n       }\n \n-      int\n+      constexpr int\n       compare(size_type __pos1, size_type __n1, basic_string_view __str) const\n       { return this->substr(__pos1, __n1).compare(__str); }\n \n-      int\n+      constexpr int\n       compare(size_type __pos1, size_type __n1,\n \t      basic_string_view __str, size_type __pos2, size_type __n2) const\n       { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); }\n \n-      int\n+      constexpr int\n       compare(const _CharT* __str) const noexcept\n       { return this->compare(basic_string_view{__str}); }\n \n-      int\n+      constexpr int\n       compare(size_type __pos1, size_type __n1, const _CharT* __str) const\n       { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); }\n \n-      int\n+      constexpr int\n       compare(size_type __pos1, size_type __n1,\n \t      const _CharT* __str, size_type __n2) const\n       {\n@@ -296,97 +297,97 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t\t   .compare(basic_string_view(__str, __n2));\n       }\n \n-      size_type\n+      constexpr size_type\n       find(basic_string_view __str, size_type __pos = 0) const noexcept\n       { return this->find(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       find(_CharT __c, size_type __pos=0) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       find(const _CharT* __str, size_type __pos, size_type __n) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       find(const _CharT* __str, size_type __pos=0) const noexcept\n       { return this->find(__str, __pos, traits_type::length(__str)); }\n \n-      size_type\n+      constexpr size_type\n       rfind(basic_string_view __str, size_type __pos = npos) const noexcept\n       { return this->rfind(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       rfind(_CharT __c, size_type __pos = npos) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       rfind(const _CharT* __str, size_type __pos = npos) const noexcept\n       { return this->rfind(__str, __pos, traits_type::length(__str)); }\n \n-      size_type\n+      constexpr size_type\n       find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept\n       { return this->find_first_of(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       find_first_of(_CharT __c, size_type __pos = 0) const noexcept\n       { return this->find(__c, __pos); }\n \n-      size_type\n+      constexpr size_type\n       find_first_of(const _CharT* __str, size_type __pos, size_type __n) const;\n \n-      size_type\n+      constexpr size_type\n       find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept\n       { return this->find_first_of(__str, __pos, traits_type::length(__str)); }\n \n-      size_type\n+      constexpr size_type\n       find_last_of(basic_string_view __str,\n \t\t   size_type __pos = npos) const noexcept\n       { return this->find_last_of(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       find_last_of(_CharT __c, size_type __pos=npos) const noexcept\n       { return this->rfind(__c, __pos); }\n \n-      size_type\n+      constexpr size_type\n       find_last_of(const _CharT* __str, size_type __pos, size_type __n) const;\n \n-      size_type\n+      constexpr size_type\n       find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept\n       { return this->find_last_of(__str, __pos, traits_type::length(__str)); }\n \n-      size_type\n+      constexpr size_type\n       find_first_not_of(basic_string_view __str,\n \t\t\tsize_type __pos = 0) const noexcept\n       { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       find_first_not_of(const _CharT* __str,\n \t\t\tsize_type __pos, size_type __n) const;\n \n-      size_type\n+      constexpr size_type\n       find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept\n       {\n \treturn this->find_first_not_of(__str, __pos,\n \t\t\t\t       traits_type::length(__str));\n       }\n \n-      size_type\n+      constexpr size_type\n       find_last_not_of(basic_string_view __str,\n \t\t       size_type __pos = npos) const noexcept\n       { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); }\n \n-      size_type\n+      constexpr size_type\n       find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept;\n \n-      size_type\n+      constexpr size_type\n       find_last_not_of(const _CharT* __str,\n \t\t       size_type __pos, size_type __n) const;\n \n-      size_type\n+      constexpr size_type\n       find_last_not_of(const _CharT* __str,\n \t\t       size_type __pos = npos) const noexcept\n       {\n@@ -394,7 +395,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t\t\t\t      traits_type::length(__str));\n       }\n \n-      size_type\n+      constexpr size_type\n       _M_check(size_type __pos, const char* __s) const\n       {\n \tif (__pos > this->size())\n@@ -405,7 +406,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       }\n \n       // NB: _M_limit doesn't check for a bad __pos value.\n-      size_type\n+      constexpr size_type\n       _M_limit(size_type __pos, size_type __off) const _GLIBCXX_NOEXCEPT\n       {\n \tconst bool __testoff =  __off < this->size() - __pos;\n@@ -440,109 +441,109 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator==(basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.size() == __y.size() && __x.compare(__y) == 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator==(basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return __x.size() == __y.size() && __x.compare(__y) == 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator==(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.size() == __y.size() && __x.compare(__y) == 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator!=(basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return !(__x == __y); }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator!=(basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return !(__x == __y); }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator!=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return !(__x == __y); }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator< (basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) < 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator< (basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return __x.compare(__y) < 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator< (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) < 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator> (basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) > 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator> (basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return __x.compare(__y) > 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator> (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) > 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator<=(basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) <= 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator<=(basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return __x.compare(__y) <= 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) <= 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator>=(basic_string_view<_CharT, _Traits> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) >= 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator>=(basic_string_view<_CharT, _Traits> __x,\n                __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept\n     { return __x.compare(__y) >= 0; }\n \n   template<typename _CharT, typename _Traits>\n-    inline bool\n+    constexpr bool\n     operator>=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,\n                basic_string_view<_CharT, _Traits> __y) noexcept\n     { return __x.compare(__y) >= 0; }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc\nindex da5558da91f..2ce3824d260 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc\n@@ -33,10 +33,29 @@ test01()\n   VERIFY( str0 == string_view{\"pus mons\"} );\n }\n \n+constexpr bool\n+test02()\n+{\n+  using std::string_view;\n+\n+  string_view str0{\"olympus mons\"};\n+  string_view::pointer p = str0.data();\n+  str0.remove_prefix(4);\n+  if ( str0.data() != p + 4)\n+    return false;\n+  if ( str0.length() != 8 )\n+    return false;\n+  if ( str0 != string_view{\"pus mons\"} )\n+    return false;\n+\n+  return true;\n+}\n+\n int\n main()\n { \n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc\nindex db38ab3c616..5c74837dde5 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc\n@@ -33,10 +33,29 @@ test01()\n   VERIFY( str0 == wstring_view{L\"pus mons\"} );\n }\n \n+constexpr bool\n+test02()\n+{\n+  using std::wstring_view;\n+\n+  wstring_view str0{L\"olympus mons\"};\n+  wstring_view::pointer p = str0.data();\n+  str0.remove_prefix(4);\n+  if ( str0.data() != p + 4)\n+    return false;\n+  if ( str0.length() != 8 )\n+    return false;\n+  if ( str0 != wstring_view{L\"pus mons\"} )\n+    return false;\n+\n+  return true;\n+}\n+\n int\n main()\n { \n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc\nindex 042f9bbce6b..4014fc590e2 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc\n@@ -33,10 +33,29 @@ test01()\n   VERIFY( str0 == string_view{\"olympus mo\"} );\n }\n \n+constexpr bool\n+test02()\n+{\n+  using std::string_view;\n+\n+  string_view str0{\"olympus mons\"};\n+  string_view::pointer p = str0.data();\n+  str0.remove_suffix(2);\n+  if ( str0.data() != p)\n+    return false;\n+  if ( str0.length() != 10 )\n+    return false;\n+  if ( str0 != string_view{\"olympus mo\"} )\n+    return false;\n+\n+  return true;\n+}\n+\n int\n main()\n { \n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc\nindex 05c90d8c32a..f0423bc01aa 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc\n@@ -33,10 +33,29 @@ test01()\n   VERIFY( str0 == wstring_view{L\"olympus mo\"} );\n }\n \n+constexpr bool\n+test02()\n+{\n+  using std::wstring_view;\n+\n+  wstring_view str0{L\"olympus mons\"};\n+  wstring_view::pointer p = str0.data();\n+  str0.remove_suffix(2);\n+  if ( str0.data() != p)\n+    return false;\n+  if ( str0.length() != 10 )\n+    return false;\n+  if ( str0 != wstring_view{L\"olympus mo\"} )\n+    return false;\n+\n+  return true;\n+}\n+\n int\n main()\n { \n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc\nnew file mode 100644\nindex 00000000000..0cb4c79861b\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc\n@@ -0,0 +1,35 @@\n+// Copyright (C) 2017 Free Software Foundation, Inc.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// You should have received a copy of the GNU General Public License along\n+// with this library; see the file COPYING3.  If not see\n+// <http://www.gnu.org/licenses/>.\n+\n+// { dg-options \"-std=gnu++17\" }\n+// { dg-do compile { target c++1z } }\n+\n+#include <string_view>\n+\n+constexpr bool\n+test01()\n+{\n+  using std::string_view;\n+\n+  string_view s1{\"last\"};\n+  string_view s2{\"first\"};\n+\n+  s1.swap(s2);\n+  return s1 == \"first\" && s2 == \"last\";\n+}\n+\n+static_assert( test01() );\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc\nnew file mode 100644\nindex 00000000000..d8322a8b274\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc\n@@ -0,0 +1,35 @@\n+// Copyright (C) 2017 Free Software Foundation, Inc.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// You should have received a copy of the GNU General Public License along\n+// with this library; see the file COPYING3.  If not see\n+// <http://www.gnu.org/licenses/>.\n+\n+// { dg-options \"-std=gnu++17\" }\n+// { dg-do compile { target c++1z } }\n+\n+#include <string_view>\n+\n+constexpr bool\n+test01()\n+{\n+  using std::wstring_view;\n+\n+  wstring_view s1{L\"last\"};\n+  wstring_view s2{L\"first\"};\n+\n+  s1.swap(s2);\n+  return s1 == L\"first\" && s2 == L\"last\";\n+}\n+\n+static_assert( test01() );\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc\nindex e4e41f70a47..26e51b88a4e 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc\n@@ -62,9 +62,8 @@ test_value(int result, want_value expected)\n   VERIFY(pass);\n   return 0;\n }\n- \n \n-int \n+int\n test01()\n {\n   using std::string_view;\n@@ -74,7 +73,7 @@ test01()\n   string_view \tstr_2;\n \n   //sanity check\n-  test_value(strcmp(\"costa marbella\", \"costa rica\"), lt); \n+  test_value(strcmp(\"costa marbella\", \"costa rica\"), lt);\n   test_value(strcmp(\"costa rica\", \"costa rica\"), z);\n   test_value(strcmp(str_1.data(), str_0.data()), lt);\n   test_value(strcmp(str_0.data(), str_1.data()), gt);\n@@ -100,8 +99,8 @@ test01()\n   test_value(str_1.compare(0, 4, str_2), z);\n   test_value(str_1.compare(0, 5, str_2), gt);\n \n-  // int compare(size_type pos1, size_type n1, const basic_string_view& str, \n-  //\t\t size_type pos2, size_type n2) const;\t\n+  // int compare(size_type pos1, size_type n1, const basic_string_view& str,\n+  //\t\t size_type pos2, size_type n2) const;\n   test_value(str_1.compare(0, 6, str_0, 0, 6), z);\n   test_value(str_1.compare(0, 7, str_0, 0, 7), lt);\n   test_value(str_0.compare(0, 7, str_1, 0, 7), gt);\n@@ -111,21 +110,21 @@ test01()\n   test_value(str_1.compare(\"costa rica\"), lt);\n   str_2 = str_0;\n   test_value(str_2.compare(\"costa rica\"), z);\n-  test_value(str_2.compare(\"cost\"), gt);\t\t\t\n-  test_value(str_2.compare(\"costa ricans\"), lt);\t   \n+  test_value(str_2.compare(\"cost\"), gt);\n+  test_value(str_2.compare(\"costa ricans\"), lt);\n \n   // int compare(size_type pos, size_type n1, const charT* str,\n   //             size_type n2 = npos) const;\n-  test_value(str_1.compare(0, 6, \"costa rica\", 0, 6), z); \n-  test_value(str_1.compare(0, 7, \"costa rica\", 0, 7), lt); \n-  test_value(str_0.compare(0, 7, \"costa marbella\", 0, 7), gt); \n+  test_value(str_1.compare(0, 6, \"costa rica\", 0, 6), z);\n+  test_value(str_1.compare(0, 7, \"costa rica\", 0, 7), lt);\n+  test_value(str_0.compare(0, 7, \"costa marbella\", 0, 7), gt);\n \n   return 0;\n }\n \n \n-int \n-main() \n+int\n+main()\n {\n   test01();\n \ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc\nnew file mode 100644\nindex 00000000000..8118b97468b\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc\n@@ -0,0 +1,30 @@\n+// Copyright (C) 2017 Free Software Foundation, Inc.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// You should have received a copy of the GNU General Public License along\n+// with this library; see the file COPYING3.  If not see\n+// <http://www.gnu.org/licenses/>.\n+\n+// { dg-options \"-std=gnu++17\" }\n+// { dg-do compile { target c++1z } }\n+\n+#include <string_view>\n+\n+constexpr char c1[] = \"one\";\n+constexpr char c2[] = \"two\";\n+\n+constexpr std::string_view s1{c1};\n+constexpr std::string_view s2{c2};\n+\n+constexpr int n1 = s1.compare(s1);\n+constexpr int n2 = s1.compare(s2);\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc\nnew file mode 100644\nindex 00000000000..27b6def1b05\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc\n@@ -0,0 +1,89 @@\n+// Copyright (C) 2017 Free Software Foundation, Inc.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// You should have received a copy of the GNU General Public License along\n+// with this library; see the file COPYING3.  If not see\n+// <http://www.gnu.org/licenses/>.\n+\n+// { dg-options \"-std=gnu++17\" }\n+// { dg-do compile { target c++1z } }\n+\n+#include <string_view>\n+\n+struct constexpr_char_traits : std::char_traits<char>\n+{\n+  static constexpr size_t\n+  length(const char* val)\n+  {\n+    size_t res = 0;\n+    for (; val[res] != '\\0'; ++res)\n+      ;\n+    return res;\n+  }\n+\n+  static constexpr int\n+  compare(const char* lhs, const char* rhs, std::size_t count)\n+  {\n+    for (size_t pos = 0; pos < count; ++pos)\n+    {\n+      if (lhs[pos] != rhs[pos])\n+        return lhs[pos] - rhs[pos];\n+    }\n+    return 0;\n+  }\n+};\n+\n+using string_view = std::basic_string_view<char, constexpr_char_traits>;\n+\n+constexpr\n+string_view get()\n+{\n+    string_view res = \"x::\";\n+    string_view start_pattern = \"x\";\n+    res = res.substr(res.find(start_pattern) + start_pattern.size());\n+    res = res.substr(0, res.find_first_of(\";]\"));\n+    res = res.substr(res.rfind(\"::\"));\n+    return res;\n+}\n+\n+static_assert( get() == get() );\n+\n+using std::u16string_view;\n+\n+constexpr\n+u16string_view get16()\n+{\n+    u16string_view res = u\"x::\";\n+    u16string_view start_pattern = u\"x\";\n+    res = res.substr(res.find(start_pattern) + start_pattern.size());\n+    res = res.substr(0, res.find_first_of(u\";]\"));\n+    res = res.substr(res.rfind(u\"::\"));\n+    return res;\n+}\n+\n+static_assert( get16() == get16() );\n+\n+using std::u32string_view;\n+\n+constexpr\n+u32string_view get32()\n+{\n+    u32string_view res = U\"x::\";\n+    u32string_view start_pattern = U\"x\";\n+    res = res.substr(res.find(start_pattern) + start_pattern.size());\n+    res = res.substr(0, res.find_first_of(U\";]\"));\n+    res = res.substr(res.rfind(U\"::\"));\n+    return res;\n+}\n+\n+static_assert( get32() == get32() );\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc\nindex 47b36c6cb01..60f5bcf0e36 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc\n@@ -62,9 +62,9 @@ test_value(int result, want_value expected)\n   VERIFY(pass);\n   return 0;\n }\n- \n \n-int \n+\n+int\n test01()\n {\n   using std::wstring_view;\n@@ -74,7 +74,7 @@ test01()\n   wstring_view \tstr_2;\n \n   //sanity check\n-  test_value(wcscmp(L\"costa marbella\", L\"costa rica\"), lt); \n+  test_value(wcscmp(L\"costa marbella\", L\"costa rica\"), lt);\n   test_value(wcscmp(L\"costa rica\", L\"costa rica\"), z);\n   test_value(wcscmp(str_1.data(), str_0.data()), lt);\n   test_value(wcscmp(str_0.data(), str_1.data()), gt);\n@@ -100,8 +100,8 @@ test01()\n   test_value(str_1.compare(0, 4, str_2), z);\n   test_value(str_1.compare(0, 5, str_2), gt);\n \n-  // int compare(size_type pos1, size_type n1, const basic_string_view& str, \n-  //\t\t size_type pos2, size_type n2) const;\t\n+  // int compare(size_type pos1, size_type n1, const basic_string_view& str,\n+  //\t\t size_type pos2, size_type n2) const;\n   test_value(str_1.compare(0, 6, str_0, 0, 6), z);\n   test_value(str_1.compare(0, 7, str_0, 0, 7), lt);\n   test_value(str_0.compare(0, 7, str_1, 0, 7), gt);\n@@ -111,21 +111,21 @@ test01()\n   test_value(str_1.compare(L\"costa rica\"), lt);\n   str_2 = str_0;\n   test_value(str_2.compare(L\"costa rica\"), z);\n-  test_value(str_2.compare(L\"cost\"), gt);\t\t\t\n-  test_value(str_2.compare(L\"costa ricans\"), lt);\t   \n+  test_value(str_2.compare(L\"cost\"), gt);\n+  test_value(str_2.compare(L\"costa ricans\"), lt);\n \n   // int compare(size_type pos, size_type n1, const charT* str,\n   //             size_type n2 = npos) const;\n-  test_value(str_1.compare(0, 6, L\"costa rica\", 0, 6), z); \n-  test_value(str_1.compare(0, 7, L\"costa rica\", 0, 7), lt); \n-  test_value(str_0.compare(0, 7, L\"costa marbella\", 0, 7), gt); \n+  test_value(str_1.compare(0, 6, L\"costa rica\", 0, 6), z);\n+  test_value(str_1.compare(0, 7, L\"costa rica\", 0, 7), lt);\n+  test_value(str_0.compare(0, 7, L\"costa marbella\", 0, 7), gt);\n \n   return 0;\n }\n \n \n-int \n-main() \n+int\n+main()\n {\n   test01();\n \ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc\nnew file mode 100644\nindex 00000000000..0049ae3ca0c\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc\n@@ -0,0 +1,30 @@\n+// Copyright (C) 2017 Free Software Foundation, Inc.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// You should have received a copy of the GNU General Public License along\n+// with this library; see the file COPYING3.  If not see\n+// <http://www.gnu.org/licenses/>.\n+\n+// { dg-options \"-std=gnu++17\" }\n+// { dg-do compile { target c++1z } }\n+\n+#include <string_view>\n+\n+constexpr wchar_t c1[] = L\"one\";\n+constexpr wchar_t c2[] = L\"two\";\n+\n+constexpr std::wstring_view s1{c1};\n+constexpr std::wstring_view s2{c2};\n+\n+constexpr int n1 = s1.compare(s1);\n+constexpr int n2 = s1.compare(s2);\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc\nindex cc56ddba91e..d00bcdf1459 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc\n@@ -61,10 +61,10 @@ test01()\n   csz01 = str01.find(str04, 5);\n   VERIFY( csz01 == 5 );\n   csz01 = str01.find(str04, str01.size());\n-  VERIFY( csz01 == str01.size() ); \n+  VERIFY( csz01 == str01.size() );\n   csz01 = str01.find(str04, str01.size()+1);\n-  VERIFY( csz01 == npos ); \n-  \n+  VERIFY( csz01 == npos );\n+\n   // size_type find(const char* s, size_type pos, size_type n) const;\n   csz01 = str01.find(str_lit01, 0, 3);\n   VERIFY( csz01 == 0 );\n@@ -85,10 +85,80 @@ test01()\n   VERIFY( csz01 == npos );\n }\n \n+constexpr bool\n+test02()\n+{\n+  typedef std::string_view::size_type csize_type;\n+  typedef std::string_view::const_reference cref;\n+  typedef std::string_view::reference ref;\n+  csize_type npos = std::string_view::npos;\n+  csize_type csz01 = 0, csz02 = 0;\n+\n+  const char str_lit01[] = \"mave\";\n+  const std::string_view str01(\"mavericks, santa cruz\");\n+  std::string_view str02(str_lit01);\n+  std::string_view str03(\"s, s\");\n+  std::string_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find(const string_view&, size_type pos = 0) const;\n+  csz01 = str01.find(str01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str01, 4);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str02, 3);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find(str03, 3);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find(str03, 12);\n+  VERIFY( csz01 == npos );\n+\n+  // An empty string_view consists of no characters\n+  // therefore it should be found at every point in a string_view,\n+  // except beyond the end\n+  csz01 = str01.find(str04, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str04, 5);\n+  VERIFY( csz01 == 5 );\n+  csz01 = str01.find(str04, str01.size());\n+  VERIFY( csz01 == str01.size() );\n+  csz01 = str01.find(str04, str01.size()+1);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find(const char* s, size_type pos, size_type n) const;\n+  csz01 = str01.find(str_lit01, 0, 3);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str_lit01, 3, 0);\n+  VERIFY( csz01 == 3 );\n+\n+  // size_type find(const char* s, size_type pos = 0) const;\n+  csz01 = str01.find(str_lit01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str_lit01, 3);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find(char c, size_type pos = 0) const;\n+  csz01 = str01.find('z');\n+  csz02 = str01.size() - 1;\n+  VERIFY( csz01 == csz02 );\n+  csz01 = str01.find('/');\n+  VERIFY( csz01 == npos );\n+\n+  return true;\n+}\n+\n+\n int\n main()\n-{ \n+{\n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc\nindex 2420cb98073..59fa0766a22 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc\n@@ -59,13 +59,13 @@ test02()\n   // An empty string_view consists of no characters\n   // therefore it should be found at every point in a string_view,\n   // except beyond the end\n-  // However, str1.find_first_of(str2,pos) finds the first character in \n+  // However, str1.find_first_of(str2,pos) finds the first character in\n   // str1 (starting at pos) that exists in str2, which is none for empty str2\n   csz01 = str01.find_first_of(str04, 0);\n   VERIFY( csz01 == npos );\n   csz01 = str01.find_first_of(str04, 5);\n   VERIFY( csz01 == npos );\n-  \n+\n   // size_type find_first_of(const char* s, size_type pos, size_type n) const;\n   csz01 = str01.find_first_of(str_lit01, 0, 3);\n   VERIFY( csz01 == 0 );\n@@ -84,10 +84,78 @@ test02()\n   VERIFY( csz01 == csz02 );\n }\n \n+constexpr bool\n+test03()\n+{\n+  typedef std::string_view::size_type csize_type;\n+  csize_type npos = std::string_view::npos;\n+  csize_type csz01 = 0, csz02 = 0;\n+\n+  const char str_lit01[] = \"mave\";\n+  const std::string_view str01(\"mavericks, santa cruz\");\n+  std::string_view str02(str_lit01);\n+  std::string_view str03(\"s, s\");\n+  std::string_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find_first_of(const string_view&, size_type pos = 0) const;\n+  std::string_view str05(\"xena rulez\");\n+  csz01 = str01.find_first_of(str01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str01, 4);\n+  VERIFY( csz01 == 4 );\n+  csz01 = str01.find_first_of(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str02, 3);\n+  VERIFY( csz01 == 3 );\n+  csz01 = str01.find_first_of(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_of(str03, 3);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_of(str03, 12);\n+  VERIFY( csz01 == 16 );\n+  csz01 = str01.find_first_of(str05, 0);\n+  VERIFY( csz01 == 1 );\n+  csz01 = str01.find_first_of(str05, 4);\n+  VERIFY( csz01 == 4 );\n+\n+  // An empty string_view consists of no characters\n+  // therefore it should be found at every point in a string_view,\n+  // except beyond the end\n+  // However, str1.find_first_of(str2,pos) finds the first character in\n+  // str1 (starting at pos) that exists in str2, which is none for empty str2\n+  csz01 = str01.find_first_of(str04, 0);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_of(str04, 5);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_of(const char* s, size_type pos, size_type n) const;\n+  csz01 = str01.find_first_of(str_lit01, 0, 3);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str_lit01, 3, 0);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_of(const char* s, size_type pos = 0) const;\n+  csz01 = str01.find_first_of(str_lit01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str_lit01, 3);\n+  VERIFY( csz01 == 3 );\n+\n+  // size_type find_first_of(char c, size_type pos = 0) const;\n+  csz01 = str01.find_first_of('z');\n+  csz02 = str01.size() - 1;\n+  VERIFY( csz01 == csz02 );\n+\n+  return true;\n+}\n+\n int\n main()\n-{ \n+{\n   test02();\n+  static_assert( test03() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc\nindex 9c9a49123f8..edbe8df1c65 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc\n@@ -84,10 +84,78 @@ test03()\n   VERIFY( csz01 == npos );\n }\n \n+constexpr bool\n+test04()\n+{\n+  typedef std::string_view::size_type csize_type;\n+  csize_type npos = std::string_view::npos;\n+  csize_type csz01 = 0;\n+\n+  const std::string_view str01(\"Bob Rock, per me\");\n+  const char str_lit01[] = \"Bob Rock\";\n+  std::string_view str02(\"ovvero Trivi\");\n+  std::string_view str03(str_lit01);\n+  std::string_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find_first_not_of(const string_view&, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of(str01);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_not_of(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str02, 10);\n+  VERIFY( csz01 == 10 );\n+  csz01 = str01.find_first_not_of(str02, 12);\n+  VERIFY( csz01 == 14 );\n+  csz01 = str01.find_first_not_of(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_not_of(str03, 15);\n+  VERIFY( csz01 == 15 );\n+  csz01 = str01.find_first_not_of(str03, 16);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_not_of(str04, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str04, 12);\n+  VERIFY( csz01 == 12 );\n+  csz01 = str03.find_first_not_of(str01, 0);\n+  VERIFY( csz01 == npos );\n+  csz01 = str04.find_first_not_of(str02, 0);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_not_of(const char* s, size_type pos, size_type n) const;\n+  csz01 = str01.find_first_not_of(str_lit01, 0, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str_lit01, 0, 8);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_not_of(str_lit01, 10, 0);\n+  VERIFY( csz01 == 10 );\n+\n+  // size_type find_first_not_of(const char* s, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of(str_lit01);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str02.find_first_not_of(str_lit01, 2);\n+  VERIFY( csz01 == 2 );\n+\n+  // size_type find_first_not_of(char c, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of('B');\n+  VERIFY( csz01 == 1 );\n+  csz01 = str01.find_first_not_of('o', 1);\n+  VERIFY( csz01 == 2 );\n+  csz01 = str02.find_first_not_of('z');\n+  VERIFY( csz01 == 0 );\n+  csz01 = str04.find_first_not_of('S');\n+  VERIFY( csz01 == npos );\n+\n+  return true;\n+}\n+\n int\n main()\n-{ \n+{\n   test03();\n+  static_assert( test04() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc\nindex f0affe23639..401ef6fa9ad 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc\n@@ -61,10 +61,10 @@ test01()\n   csz01 = str01.find(str04, 5);\n   VERIFY( csz01 == 5 );\n   csz01 = str01.find(str04, str01.size());\n-  VERIFY( csz01 == str01.size() ); \n+  VERIFY( csz01 == str01.size() );\n   csz01 = str01.find(str04, str01.size()+1);\n-  VERIFY( csz01 == npos ); \n-  \n+  VERIFY( csz01 == npos );\n+\n   // size_type find(const wchar_t* s, size_type pos, size_type n) const;\n   csz01 = str01.find(str_lit01, 0, 3);\n   VERIFY( csz01 == 0 );\n@@ -85,10 +85,79 @@ test01()\n   VERIFY( csz01 == npos );\n }\n \n+constexpr bool\n+test02()\n+{\n+  typedef std::wstring_view::size_type csize_type;\n+  typedef std::wstring_view::const_reference cref;\n+  typedef std::wstring_view::reference ref;\n+  csize_type npos = std::wstring_view::npos;\n+  csize_type csz01 = 0, csz02 = 0;\n+\n+  const wchar_t str_lit01[] = L\"mave\";\n+  const std::wstring_view str01(L\"mavericks, santa cruz\");\n+  std::wstring_view str02(str_lit01);\n+  std::wstring_view str03(L\"s, s\");\n+  std::wstring_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find(const wstring_view&, size_type pos = 0) const;\n+  csz01 = str01.find(str01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str01, 4);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str02, 3);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find(str03, 3);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find(str03, 12);\n+  VERIFY( csz01 == npos );\n+\n+  // An empty string_view consists of no characters\n+  // therefore it should be found at every point in a string_view,\n+  // except beyond the end\n+  csz01 = str01.find(str04, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str04, 5);\n+  VERIFY( csz01 == 5 );\n+  csz01 = str01.find(str04, str01.size());\n+  VERIFY( csz01 == str01.size() );\n+  csz01 = str01.find(str04, str01.size()+1);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find(const wchar_t* s, size_type pos, size_type n) const;\n+  csz01 = str01.find(str_lit01, 0, 3);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str_lit01, 3, 0);\n+  VERIFY( csz01 == 3 );\n+\n+  // size_type find(const wchar_t* s, size_type pos = 0) const;\n+  csz01 = str01.find(str_lit01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find(str_lit01, 3);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find(wchar_t c, size_type pos = 0) const;\n+  csz01 = str01.find(L'z');\n+  csz02 = str01.size() - 1;\n+  VERIFY( csz01 == csz02 );\n+  csz01 = str01.find(L'/');\n+  VERIFY( csz01 == npos );\n+\n+  return true;\n+}\n+\n int\n main()\n-{ \n+{\n   test01();\n+  static_assert( test02() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc\nindex 13434de844e..a74f72f8767 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc\n@@ -59,13 +59,13 @@ test02()\n   // An empty string_view consists of no characters\n   // therefore it should be found at every point in a string_view,\n   // except beyond the end\n-  // However, str1.find_first_of(str2,pos) finds the first character in \n+  // However, str1.find_first_of(str2,pos) finds the first character in\n   // str1 (starting at pos) that exists in str2, which is none for empty str2\n   csz01 = str01.find_first_of(str04, 0);\n   VERIFY( csz01 == npos );\n   csz01 = str01.find_first_of(str04, 5);\n   VERIFY( csz01 == npos );\n-  \n+\n   // size_type find_first_of(const wchar_t* s, size_type pos, size_type n) const;\n   csz01 = str01.find_first_of(str_lit01, 0, 3);\n   VERIFY( csz01 == 0 );\n@@ -84,10 +84,78 @@ test02()\n   VERIFY( csz01 == csz02 );\n }\n \n+constexpr bool\n+test04()\n+{\n+  typedef std::wstring_view::size_type csize_type;\n+  csize_type npos = std::wstring_view::npos;\n+  csize_type csz01 = 0, csz02 = 0;\n+\n+  const wchar_t str_lit01[] = L\"mave\";\n+  const std::wstring_view str01(L\"mavericks, santa cruz\");\n+  std::wstring_view str02(str_lit01);\n+  std::wstring_view str03(L\"s, s\");\n+  std::wstring_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find_first_of(const wstring_view&, size_type pos = 0) const;\n+  std::wstring_view str05(L\"xena rulez\");\n+  csz01 = str01.find_first_of(str01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str01, 4);\n+  VERIFY( csz01 == 4 );\n+  csz01 = str01.find_first_of(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str02, 3);\n+  VERIFY( csz01 == 3 );\n+  csz01 = str01.find_first_of(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_of(str03, 3);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_of(str03, 12);\n+  VERIFY( csz01 == 16 );\n+  csz01 = str01.find_first_of(str05, 0);\n+  VERIFY( csz01 == 1 );\n+  csz01 = str01.find_first_of(str05, 4);\n+  VERIFY( csz01 == 4 );\n+\n+  // An empty string_view consists of no characters\n+  // therefore it should be found at every point in a string_view,\n+  // except beyond the end\n+  // However, str1.find_first_of(str2,pos) finds the first character in\n+  // str1 (starting at pos) that exists in str2, which is none for empty str2\n+  csz01 = str01.find_first_of(str04, 0);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_of(str04, 5);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_of(const wchar_t* s, size_type pos, size_type n) const;\n+  csz01 = str01.find_first_of(str_lit01, 0, 3);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str_lit01, 3, 0);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_of(const wchar_t* s, size_type pos = 0) const;\n+  csz01 = str01.find_first_of(str_lit01);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_of(str_lit01, 3);\n+  VERIFY( csz01 == 3 );\n+\n+  // size_type find_first_of(wchar_t c, size_type pos = 0) const;\n+  csz01 = str01.find_first_of(L'z');\n+  csz02 = str01.size() - 1;\n+  VERIFY( csz01 == csz02 );\n+\n+  return true;\n+}\n+\n int\n main()\n-{ \n+{\n   test02();\n+  static_assert( test04() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc\nindex 8c2c81b27f2..901c780b108 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc\n@@ -84,10 +84,78 @@ test03()\n   VERIFY( csz01 == npos );\n }\n \n+constexpr bool\n+test04()\n+{\n+  typedef std::wstring_view::size_type csize_type;\n+  csize_type npos = std::wstring_view::npos;\n+  csize_type csz01 = 0;\n+\n+  const std::wstring_view str01(L\"Bob Rock, per me\");\n+  const wchar_t str_lit01[] = L\"Bob Rock\";\n+  std::wstring_view str02(L\"ovvero Trivi\");\n+  std::wstring_view str03(str_lit01);\n+  std::wstring_view str04;\n+\n+#undef VERIFY\n+#define VERIFY(x) if(!(x)) return false\n+\n+  // size_type find_first_not_of(const string_view&, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of(str01);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_not_of(str02, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str02, 10);\n+  VERIFY( csz01 == 10 );\n+  csz01 = str01.find_first_not_of(str02, 12);\n+  VERIFY( csz01 == 14 );\n+  csz01 = str01.find_first_not_of(str03, 0);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_not_of(str03, 15);\n+  VERIFY( csz01 == 15 );\n+  csz01 = str01.find_first_not_of(str03, 16);\n+  VERIFY( csz01 == npos );\n+  csz01 = str01.find_first_not_of(str04, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str04, 12);\n+  VERIFY( csz01 == 12 );\n+  csz01 = str03.find_first_not_of(str01, 0);\n+  VERIFY( csz01 == npos );\n+  csz01 = str04.find_first_not_of(str02, 0);\n+  VERIFY( csz01 == npos );\n+\n+  // size_type find_first_not_of(const char* s, size_type pos, size_type n) const;\n+  csz01 = str01.find_first_not_of(str_lit01, 0, 0);\n+  VERIFY( csz01 == 0 );\n+  csz01 = str01.find_first_not_of(str_lit01, 0, 8);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str01.find_first_not_of(str_lit01, 10, 0);\n+  VERIFY( csz01 == 10 );\n+\n+  // size_type find_first_not_of(const char* s, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of(str_lit01);\n+  VERIFY( csz01 == 8 );\n+  csz01 = str02.find_first_not_of(str_lit01, 2);\n+  VERIFY( csz01 == 2 );\n+\n+  // size_type find_first_not_of(char c, size_type pos = 0) const;\n+  csz01 = str01.find_first_not_of(L'B');\n+  VERIFY( csz01 == 1 );\n+  csz01 = str01.find_first_not_of(L'o', 1);\n+  VERIFY( csz01 == 2 );\n+  csz01 = str02.find_first_not_of(L'z');\n+  VERIFY( csz01 == 0 );\n+  csz01 = str04.find_first_not_of(L'S');\n+  VERIFY( csz01 == npos );\n+\n+  return true;\n+}\n+\n int\n main()\n-{ \n+{\n   test03();\n+  static_assert( test04() );\n \n   return 0;\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc\nindex 89130b8363b..93533b38875 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc\n@@ -112,7 +112,7 @@ template<class charT, class traits, class Allocator>\n #include <string_view>\n #include <testsuite_hooks.h>\n \n-int\n+void\n test01()\n {\n   std::string_view \tstr_0(\"costa rica\");\n@@ -120,7 +120,7 @@ test01()\n   std::string_view \tstr_2(\"cost\");\n   std::string_view\tstr_3(\"costa ricans\");\n   std::string_view        str_4;\n-  \n+\n   str_4 = str_0;\n   //comparisons between string objects\n   VERIFY( !(str_0 == str_1) );\n@@ -140,7 +140,131 @@ test01()\n   VERIFY( str_3 != str_0 );\n   VERIFY( !(str_0 != str_4) );\n   VERIFY( !(str_4 != str_0) );\n-   \n+\n+  VERIFY( str_0 > str_1 ); //true cuz r>m\n+  VERIFY( str_0 > str_2 );\n+  VERIFY( !(str_0 > str_3) );\n+  VERIFY( !(str_1 > str_0) ); //false cuz m<r\n+  VERIFY( !(str_2 > str_0) );\n+  VERIFY( str_3 > str_0 );\n+  VERIFY( !(str_0 > str_4) );\n+  VERIFY( !(str_4 > str_0) );\n+\n+  VERIFY( !(str_0 < str_1) ); //false cuz r>m\n+  VERIFY( !(str_0 < str_2) );\n+  VERIFY( str_0 < str_3 );\n+  VERIFY( str_1 < str_0 ); //true cuz m<r\n+  VERIFY( str_2 < str_0 );\n+  VERIFY( !(str_3 < str_0) );\n+  VERIFY( !(str_0 < str_4) );\n+  VERIFY( !(str_4 < str_0) );\n+\n+  VERIFY( str_0 >= str_1 ); //true cuz r>m\n+  VERIFY( str_0 >= str_2 );\n+  VERIFY( !(str_0 >= str_3) );\n+  VERIFY( !(str_1 >= str_0) );//false cuz m<r\n+  VERIFY( !(str_2 >= str_0) );\n+  VERIFY( str_3 >= str_0 );\n+  VERIFY( str_0 >= str_4 );\n+  VERIFY( str_4 >= str_0 );\n+\n+  VERIFY( !(str_0 <= str_1) );//false cuz r>m\n+  VERIFY( !(str_0 <= str_2) );\n+  VERIFY( str_0 <= str_3 );\n+  VERIFY( str_1 <= str_0 );//true cuz m<r\n+  VERIFY( str_2 <= str_0 );\n+  VERIFY( !(str_3 <= str_0) );\n+  VERIFY( str_0 <= str_4 );\n+  VERIFY( str_4 <= str_0 );\n+\n+  //comparisons between string object and string literal\n+  VERIFY( !(str_0 == \"costa marbella\") );\n+  VERIFY( !(str_0 == \"cost\") );\n+  VERIFY( !(str_0 == \"costa ricans\") );\n+  VERIFY( !(\"costa marbella\" == str_0) );\n+  VERIFY( !(\"cost\" == str_0) );\n+  VERIFY( !(\"costa ricans\" == str_0) );\n+  VERIFY( \"costa rica\" == str_0 );\n+  VERIFY( str_0 == \"costa rica\" );\n+\n+  VERIFY( str_0 != \"costa marbella\" );\n+  VERIFY( str_0 != \"cost\" );\n+  VERIFY( str_0 != \"costa ricans\" );\n+  VERIFY( \"costa marbella\" != str_0 );\n+  VERIFY( \"cost\" != str_0 );\n+  VERIFY( \"costa ricans\" != str_0 );\n+  VERIFY( !(\"costa rica\" != str_0) );\n+  VERIFY( !(str_0 != \"costa rica\") );\n+\n+  VERIFY( str_0 > \"costa marbella\" ); //true cuz r>m\n+  VERIFY( str_0 > \"cost\" );\n+  VERIFY( !(str_0 > \"costa ricans\") );\n+  VERIFY( !(\"costa marbella\" > str_0) );//false cuz m<r\n+  VERIFY( !(\"cost\" > str_0) );\n+  VERIFY( \"costa ricans\" > str_0 );\n+  VERIFY( !(\"costa rica\" > str_0) );\n+  VERIFY( !(str_0 > \"costa rica\") );\n+\n+  VERIFY( !(str_0 < \"costa marbella\") );//false cuz r>m\n+  VERIFY( !(str_0 < \"cost\") );\n+  VERIFY( str_0 < \"costa ricans\" );\n+  VERIFY( \"costa marbella\" < str_0 );//true cuz m<r\n+  VERIFY( \"cost\" < str_0 );\n+  VERIFY( !(\"costa ricans\" < str_0) );\n+  VERIFY( !(\"costa rica\" < str_0) );\n+  VERIFY( !(str_0 < \"costa rica\") );\n+\n+  VERIFY( str_0 >= \"costa marbella\" );//true cuz r>m\n+  VERIFY( str_0 >= \"cost\" );\n+  VERIFY( !(str_0 >= \"costa ricans\") );\n+  VERIFY( !(\"costa marbella\" >= str_0) );//false cuz m<r\n+  VERIFY( !(\"cost\" >= str_0) );\n+  VERIFY( \"costa ricans\" >= str_0 );\n+  VERIFY( \"costa rica\" >= str_0 );\n+  VERIFY( str_0 >= \"costa rica\" );\n+\n+  VERIFY( !(str_0 <= \"costa marbella\") );//false cuz r>m\n+  VERIFY( !(str_0 <= \"cost\") );\n+  VERIFY( str_0 <= \"costa ricans\" );\n+  VERIFY( \"costa marbella\" <= str_0 );//true cuz m<r\n+  VERIFY( \"cost\" <= str_0 );\n+  VERIFY( !(\"costa ricans\" <= str_0) );\n+  VERIFY( \"costa rica\" <= str_0 );\n+  VERIFY( str_0 <= \"costa rica\" );\n+}\n+\n+constexpr bool\n+test02()\n+{\n+  std::string_view \tstr_0(\"costa rica\");\n+  std::string_view \tstr_1(\"costa marbella\");\n+  std::string_view \tstr_2(\"cost\");\n+  std::string_view\tstr_3(\"costa ricans\");\n+  std::string_view        str_4;\n+\n+#undef VERIFY\n+#define VERIFY(x) if (!(x)) return false\n+\n+  str_4 = str_0;\n+  //comparisons between string objects\n+  VERIFY( !(str_0 == str_1) );\n+  VERIFY( !(str_0 == str_2) );\n+  VERIFY( !(str_0 == str_3) );\n+  VERIFY( !(str_1 == str_0) );\n+  VERIFY( !(str_2 == str_0) );\n+  VERIFY( !(str_3 == str_0) );\n+  VERIFY( str_4 == str_0 );\n+  VERIFY( str_0 == str_4 );\n+\n+  VERIFY( str_0 != str_1 );\n+  VERIFY( str_0 != str_2 );\n+  VERIFY( str_0 != str_3 );\n+  VERIFY( str_1 != str_0 );\n+  VERIFY( str_2 != str_0 );\n+  VERIFY( str_3 != str_0 );\n+  VERIFY( !(str_0 != str_4) );\n+  VERIFY( !(str_4 != str_0) );\n+\n   VERIFY( str_0 > str_1 ); //true cuz r>m\n   VERIFY( str_0 > str_2 );\n   VERIFY( !(str_0 > str_3) );\n@@ -232,13 +356,12 @@ test01()\n   VERIFY( \"costa rica\" <= str_0 );\n   VERIFY( str_0 <= \"costa rica\" );\n \n-  return 0;\n+  return true;\n }\n \n int\n-main() \n+main()\n {\n   test01();\n-\n-  return 0;\n+  static_assert( test02() );\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc\nindex dce819469cd..916dce9c9ad 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc\n@@ -45,7 +45,7 @@ template<class charT, class traits, class Allocator>\n                   const basic_string_view<charT,traits,Allocator>& rhs);\n \n template<class charT, class traits, class Allocator>\n-  bool operator!=(const basic_string_view<charT,traits,Allocator>& lhs, \n+  bool operator!=(const basic_string_view<charT,traits,Allocator>& lhs,\n                   const charT* rhs);\n */\n \n@@ -60,7 +60,7 @@ template<class charT, class traits, class Allocator>\n                   const charT* rhs);\n \n template<class charT, class traits, class Allocator>\n-  bool operator< (const charT* lhs, \n+  bool operator< (const charT* lhs,\n                   const basic_string_view<charT,traits,Allocator>& rhs);\n */\n \n@@ -112,7 +112,7 @@ template<class charT, class traits, class Allocator>\n #include <string_view>\n #include <testsuite_hooks.h>\n \n-int\n+void\n test01()\n {\n   std::wstring_view \tstr_0(L\"costa rica\");\n@@ -120,7 +120,7 @@ test01()\n   std::wstring_view \tstr_2(L\"cost\");\n   std::wstring_view\tstr_3(L\"costa ricans\");\n   std::wstring_view  str_4;\n-  \n+\n   str_4 = str_0;\n   //comparisons between string_view objects\n   VERIFY( !(str_0 == str_1) );\n@@ -140,7 +140,131 @@ test01()\n   VERIFY( str_3 != str_0 );\n   VERIFY( !(str_0 != str_4) );\n   VERIFY( !(str_4 != str_0) );\n-   \n+\n+  VERIFY( str_0 > str_1 ); //true cuz r>m\n+  VERIFY( str_0 > str_2 );\n+  VERIFY( !(str_0 > str_3) );\n+  VERIFY( !(str_1 > str_0) ); //false cuz m<r\n+  VERIFY( !(str_2 > str_0) );\n+  VERIFY( str_3 > str_0 );\n+  VERIFY( !(str_0 > str_4) );\n+  VERIFY( !(str_4 > str_0) );\n+\n+  VERIFY( !(str_0 < str_1) ); //false cuz r>m\n+  VERIFY( !(str_0 < str_2) );\n+  VERIFY( str_0 < str_3 );\n+  VERIFY( str_1 < str_0 ); //true cuz m<r\n+  VERIFY( str_2 < str_0 );\n+  VERIFY( !(str_3 < str_0) );\n+  VERIFY( !(str_0 < str_4) );\n+  VERIFY( !(str_4 < str_0) );\n+\n+  VERIFY( str_0 >= str_1 ); //true cuz r>m\n+  VERIFY( str_0 >= str_2 );\n+  VERIFY( !(str_0 >= str_3) );\n+  VERIFY( !(str_1 >= str_0) );//false cuz m<r\n+  VERIFY( !(str_2 >= str_0) );\n+  VERIFY( str_3 >= str_0 );\n+  VERIFY( str_0 >= str_4 );\n+  VERIFY( str_4 >= str_0 );\n+\n+  VERIFY( !(str_0 <= str_1) );//false cuz r>m\n+  VERIFY( !(str_0 <= str_2) );\n+  VERIFY( str_0 <= str_3 );\n+  VERIFY( str_1 <= str_0 );//true cuz m<r\n+  VERIFY( str_2 <= str_0 );\n+  VERIFY( !(str_3 <= str_0) );\n+  VERIFY( str_0 <= str_4 );\n+  VERIFY( str_4 <= str_0 );\n+\n+  //comparisons between string_view object and string_view literal\n+  VERIFY( !(str_0 == L\"costa marbella\") );\n+  VERIFY( !(str_0 == L\"cost\") );\n+  VERIFY( !(str_0 == L\"costa ricans\") );\n+  VERIFY( !(L\"costa marbella\" == str_0) );\n+  VERIFY( !(L\"cost\" == str_0) );\n+  VERIFY( !(L\"costa ricans\" == str_0) );\n+  VERIFY( L\"costa rica\" == str_0 );\n+  VERIFY( str_0 == L\"costa rica\" );\n+\n+  VERIFY( str_0 != L\"costa marbella\" );\n+  VERIFY( str_0 != L\"cost\" );\n+  VERIFY( str_0 != L\"costa ricans\" );\n+  VERIFY( L\"costa marbella\" != str_0 );\n+  VERIFY( L\"cost\" != str_0 );\n+  VERIFY( L\"costa ricans\" != str_0 );\n+  VERIFY( !(L\"costa rica\" != str_0) );\n+  VERIFY( !(str_0 != L\"costa rica\") );\n+\n+  VERIFY( str_0 > L\"costa marbella\" ); //true cuz r>m\n+  VERIFY( str_0 > L\"cost\" );\n+  VERIFY( !(str_0 > L\"costa ricans\") );\n+  VERIFY( !(L\"costa marbella\" > str_0) );//false cuz m<r\n+  VERIFY( !(L\"cost\" > str_0) );\n+  VERIFY( L\"costa ricans\" > str_0 );\n+  VERIFY( !(L\"costa rica\" > str_0) );\n+  VERIFY( !(str_0 > L\"costa rica\") );\n+\n+  VERIFY( !(str_0 < L\"costa marbella\") );//false cuz r>m\n+  VERIFY( !(str_0 < L\"cost\") );\n+  VERIFY( str_0 < L\"costa ricans\" );\n+  VERIFY( L\"costa marbella\" < str_0 );//true cuz m<r\n+  VERIFY( L\"cost\" < str_0 );\n+  VERIFY( !(L\"costa ricans\" < str_0) );\n+  VERIFY( !(L\"costa rica\" < str_0) );\n+  VERIFY( !(str_0 < L\"costa rica\") );\n+\n+  VERIFY( str_0 >= L\"costa marbella\" );//true cuz r>m\n+  VERIFY( str_0 >= L\"cost\" );\n+  VERIFY( !(str_0 >= L\"costa ricans\") );\n+  VERIFY( !(L\"costa marbella\" >= str_0) );//false cuz m<r\n+  VERIFY( !(L\"cost\" >= str_0) );\n+  VERIFY( L\"costa ricans\" >= str_0 );\n+  VERIFY( L\"costa rica\" >= str_0 );\n+  VERIFY( str_0 >= L\"costa rica\" );\n+\n+  VERIFY( !(str_0 <= L\"costa marbella\") );//false cuz r>m\n+  VERIFY( !(str_0 <= L\"cost\") );\n+  VERIFY( str_0 <= L\"costa ricans\" );\n+  VERIFY( L\"costa marbella\" <= str_0 );//true cuz m<r\n+  VERIFY( L\"cost\" <= str_0 );\n+  VERIFY( !(L\"costa ricans\" <= str_0) );\n+  VERIFY( L\"costa rica\" <= str_0 );\n+  VERIFY( str_0 <= L\"costa rica\" );\n+}\n+\n+constexpr bool\n+test02()\n+{\n+  std::wstring_view \tstr_0(L\"costa rica\");\n+  std::wstring_view \tstr_1(L\"costa marbella\");\n+  std::wstring_view \tstr_2(L\"cost\");\n+  std::wstring_view\tstr_3(L\"costa ricans\");\n+  std::wstring_view  str_4;\n+\n+#undef VERIFY\n+#define VERIFY(x) if (!(x)) return false\n+\n+  str_4 = str_0;\n+  //comparisons between string_view objects\n+  VERIFY( !(str_0 == str_1) );\n+  VERIFY( !(str_0 == str_2) );\n+  VERIFY( !(str_0 == str_3) );\n+  VERIFY( !(str_1 == str_0) );\n+  VERIFY( !(str_2 == str_0) );\n+  VERIFY( !(str_3 == str_0) );\n+  VERIFY( str_4 == str_0 );\n+  VERIFY( str_0 == str_4 );\n+\n+  VERIFY( str_0 != str_1 );\n+  VERIFY( str_0 != str_2 );\n+  VERIFY( str_0 != str_3 );\n+  VERIFY( str_1 != str_0 );\n+  VERIFY( str_2 != str_0 );\n+  VERIFY( str_3 != str_0 );\n+  VERIFY( !(str_0 != str_4) );\n+  VERIFY( !(str_4 != str_0) );\n+\n   VERIFY( str_0 > str_1 ); //true cuz r>m\n   VERIFY( str_0 > str_2 );\n   VERIFY( !(str_0 > str_3) );\n@@ -232,13 +356,12 @@ test01()\n   VERIFY( L\"costa rica\" <= str_0 );\n   VERIFY( str_0 <= L\"costa rica\" );\n \n-  return 0;\n+  return true;\n }\n \n int\n-main() \n+main()\n {\n   test01();\n-\n-  return 0;\n+  static_assert( test02() );\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc\nindex e46d7eda2ba..5b65aa79dec 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc\n@@ -18,7 +18,7 @@\n // with this library; see the file COPYING3.  If not see\n // <http://www.gnu.org/licenses/>.\n \n-// 24.6.5, range access [iterator.range]\n+// C++17 27.7, range access [iterator.range]\n \n #include <string_view>\n \n@@ -28,4 +28,20 @@ test01()\n   std::string_view s(\"Hello, World!\");\n   std::begin(s);\n   std::end(s);\n+  std::rbegin(s);\n+  std::rend(s);\n+}\n+\n+void\n+test02()\n+{\n+  constexpr std::string_view s(\"Hello, World!\");\n+  [[maybe_unused]] constexpr auto b = std::begin(s);\n+  [[maybe_unused]] constexpr auto e = std::end(s);\n+  [[maybe_unused]] constexpr auto cb = std::cbegin(s);\n+  [[maybe_unused]] constexpr auto ce = std::cend(s);\n+  [[maybe_unused]] constexpr auto rb = std::rbegin(s);\n+  [[maybe_unused]] constexpr auto re = std::rend(s);\n+  [[maybe_unused]] constexpr auto crb = std::crbegin(s);\n+  [[maybe_unused]] constexpr auto cre = std::crend(s);\n }\ndiff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc\nindex 9c0370c20b7..84086615bb0 100644\n--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc\n+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc\n@@ -18,16 +18,30 @@\n // with this library; see the file COPYING3.  If not see\n // <http://www.gnu.org/licenses/>.\n \n-// 24.6.5, range access [iterator.range]\n+// C++17 27.7, range access [iterator.range]\n \n #include <string_view>\n \n void\n test01()\n {\n-#ifdef _GLIBCXX_USE_WCHAR_T\n   std::wstring_view ws(L\"Hello, World!\");\n   std::begin(ws);\n   std::end(ws);\n-#endif\n+  std::rbegin(ws);\n+  std::rend(ws);\n+}\n+\n+void\n+test02()\n+{\n+  constexpr std::wstring_view ws(L\"Hello, World!\");\n+  [[maybe_unused]] constexpr auto b = std::begin(ws);\n+  [[maybe_unused]] constexpr auto e = std::end(ws);\n+  [[maybe_unused]] constexpr auto cb = std::cbegin(ws);\n+  [[maybe_unused]] constexpr auto ce = std::cend(ws);\n+  [[maybe_unused]] constexpr auto rb = std::rbegin(ws);\n+  [[maybe_unused]] constexpr auto re = std::rend(ws);\n+  [[maybe_unused]] constexpr auto crb = std::crbegin(ws);\n+  [[maybe_unused]] constexpr auto cre = std::crend(ws);\n }\n",
    "prefixes": []
}