diff options
author | Patrick Palka <ppalka@redhat.com> | 2021-10-21 11:55:19 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2021-10-21 11:55:19 -0400 |
commit | 48154969d4b2e530af68ae9cd4277facf9d3f1a2 (patch) | |
tree | f2ecd913098f38786b42e9ac07a582f9df5aa05e | |
parent | 9626e44713ac4bd3c8a04ae7e62a77fae7b771e0 (diff) | |
download | gcc-48154969d4b2e530af68ae9cd4277facf9d3f1a2.zip gcc-48154969d4b2e530af68ae9cd4277facf9d3f1a2.tar.gz gcc-48154969d4b2e530af68ae9cd4277facf9d3f1a2.tar.bz2 |
libstdc++: Implement P2432R1 changes for views::istream
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.
-rw-r--r-- | libstdc++-v3/include/std/ranges | 25 | ||||
-rw-r--r-- | libstdc++-v3/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 d6bb78c..7521cd6 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -782,10 +782,27 @@ namespace views friend _Iterator; }; - template<typename _Val, typename _CharT, typename _Traits> - basic_istream_view<_Val, _CharT, _Traits> - istream_view(basic_istream<_CharT, _Traits>& __s) - { return basic_istream_view<_Val, _CharT, _Traits>{__s}; } + template<typename _Val> + using istream_view = basic_istream_view<_Val, char>; + + template<typename _Val> + using wistream_view = basic_istream_view<_Val, wchar_t>; + +namespace views +{ + template<typename _Tp> + struct _Istream + { + template<typename _CharT, typename _Traits> + [[nodiscard]] + constexpr auto + operator()(basic_istream<_CharT, _Traits>& __e) const + { return basic_istream_view<_Tp, _CharT, _Traits>(__e); } + }; + + template<typename _Tp> + 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 f5c0c2a..ea7c5a3 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<V, W> ); } +void +test07() +{ + // P2432R1, views::istream + auto nums = std::istringstream("0 1 2 3 4"); + ranges::istream_view<int> v(nums); + int sum = 0; + for (int val : views::istream<int>(nums)) + sum += val; + VERIFY( sum == 10 ); +} + int main() { @@ -112,4 +124,5 @@ main() test04(); test05(); test06(); + test07(); } |