Pretty self-explanatory. Ed
2019-11-15 Edward Smith-Rowland <3dw...@verizon.net>
Implement the default_searcher part of C++20 p1032 Misc constexpr bits. * include/std/functional (default_searcher, default_searcher::operator()): Constexpr. * testsuite/20_util/function_objects/constexpr_searcher.cc: New.
Index: include/std/functional =================================================================== --- include/std/functional (revision 278302) +++ include/std/functional (working copy) @@ -1000,6 +1000,7 @@ class default_searcher { public: + _GLIBCXX20_CONSTEXPR default_searcher(_ForwardIterator1 __pat_first, _ForwardIterator1 __pat_last, _BinaryPredicate __pred = _BinaryPredicate()) @@ -1007,7 +1008,8 @@ { } template<typename _ForwardIterator2> - pair<_ForwardIterator2, _ForwardIterator2> + _GLIBCXX20_CONSTEXPR + pair<_ForwardIterator2, _ForwardIterator2> operator()(_ForwardIterator2 __first, _ForwardIterator2 __last) const { _ForwardIterator2 __first_ret = Index: testsuite/20_util/function_objects/constexpr_searcher.cc =================================================================== --- testsuite/20_util/function_objects/constexpr_searcher.cc (nonexistent) +++ testsuite/20_util/function_objects/constexpr_searcher.cc (working copy) @@ -0,0 +1,52 @@ +// Copyright (C) 2014-2019 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-options "-std=gnu++2a" } +// { dg-do compile { target c++2a } } + +#include <functional> +#include <string_view> + +const std::string_view +patt = "World"; + +constexpr std::string_view +greet = "Hello, Humongous World of Wonder!!!"; + +const std::wstring_view +wpatt = L"World"; + +constexpr std::wstring_view +wgreet = L"Hello, Humongous World of Wonder!!!"; + +constexpr bool +test_searcher() +{ + auto ok = true; + + const std::default_searcher search(patt.begin(), patt.end(), + std::equal_to<>()); + const auto find = search(greet.begin(), greet.end()); + + const std::default_searcher wsearch(wpatt.begin(), wpatt.end(), + std::equal_to<>()); + const auto wfind = wsearch(wgreet.begin(), wgreet.end()); + + return ok; +} + +static_assert(test_searcher());