xref: /llvm-project/libcxx/test/std/ranges/range.factories/range.istream.view/end.pass.cpp (revision 96a509bca28b8668c3c2c68aae4116cc0d8c2952)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: no-localization
10 // UNSUPPORTED: c++03, c++11, c++14, c++17
11 
12 // constexpr default_sentinel_t end() const noexcept;
13 
14 #include <cassert>
15 #include <ranges>
16 #include <sstream>
17 
18 #include "test_macros.h"
19 #include "utils.h"
20 
21 template <class T>
22 concept NoexceptEnd =
23     requires(T t) {
24       { t.end() } noexcept;
25     };
26 
27 static_assert(NoexceptEnd<std::ranges::istream_view<int>>);
28 static_assert(NoexceptEnd<const std::ranges::istream_view<int>>);
29 
30 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
31 static_assert(NoexceptEnd<std::ranges::wistream_view<int>>);
32 static_assert(NoexceptEnd<const std::ranges::wistream_view<int>>);
33 #endif
34 
35 template <class CharT>
test()36 void test() {
37   auto iss = make_string_stream<CharT>("12");
38   std::ranges::basic_istream_view<int, CharT> isv{iss};
39   [[maybe_unused]] std::same_as<std::default_sentinel_t> auto sent = isv.end();
40 }
41 
main(int,char **)42 int main(int, char**) {
43   test<char>();
44 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
45   test<wchar_t>();
46 #endif
47 
48   return 0;
49 }
50