]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/24_iterators/output/concept.cc
1 // Copyright (C) 2019-2021 Free Software Foundation, Inc.
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
18 // { dg-options "-std=gnu++2a" }
19 // { dg-do compile { target c++2a } }
23 using std::output_iterator
;
25 static_assert( output_iterator
< int*, int > );
26 static_assert( output_iterator
< int*, const int > );
27 static_assert( output_iterator
< int*, long > );
28 static_assert( output_iterator
< void**, void* > );
29 static_assert( output_iterator
< void**, long* > );
30 static_assert( ! output_iterator
< const int*, int > );
32 static_assert( ! output_iterator
< int* const, int > );
33 static_assert( ! output_iterator
< const int* const, int > );
34 static_assert( ! output_iterator
< void** const, void* > );
36 static_assert( ! output_iterator
< void*, void > );
37 static_assert( ! output_iterator
< const void*, void > );
38 static_assert( ! output_iterator
< const void*, void* > );
39 static_assert( ! output_iterator
< volatile void*, void > );
40 static_assert( ! output_iterator
< volatile void*, void* > );
42 static_assert( ! output_iterator
< void(*)(), void(&)() > );
43 static_assert( ! output_iterator
< void(&)(), void(&)() > );
44 static_assert( output_iterator
< void(**)(), void(*)() > );
45 static_assert( output_iterator
< void(**)(), void(&)() > );
48 static_assert( ! output_iterator
< void(A::*)(), A
* > );
49 static_assert( ! output_iterator
< void(A::*)(), void(A::*)() > );
50 static_assert( ! output_iterator
< int A::*, int > );
51 static_assert( ! output_iterator
< int A::*, int A::* > );
55 #include <forward_list>
59 #include <string_view>
64 using std::forward_list
;
68 using std::string_view
;
73 static_assert( output_iterator
< array
<int, 1>::iterator
, int > );
74 static_assert( output_iterator
< array
<B
, 1>::iterator
, B
> );
75 static_assert( ! output_iterator
< array
<int, 1>::const_iterator
, int > );
76 static_assert( ! output_iterator
< array
<B
, 1>::const_iterator
, B
> );
78 static_assert( output_iterator
< deque
<int>::iterator
, int > );
79 static_assert( output_iterator
< deque
<B
>::iterator
, B
> );
80 static_assert( ! output_iterator
< deque
<int>::const_iterator
, int > );
81 static_assert( ! output_iterator
< deque
<B
>::const_iterator
, B
> );
83 static_assert( output_iterator
< forward_list
<int>::iterator
, int > );
84 static_assert( output_iterator
< forward_list
<B
>::iterator
, B
> );
85 static_assert( ! output_iterator
< forward_list
<int>::const_iterator
, int > );
86 static_assert( ! output_iterator
< forward_list
<B
>::const_iterator
, B
> );
88 static_assert( output_iterator
< list
<int>::iterator
, int > );
89 static_assert( output_iterator
< list
<B
>::iterator
, B
> );
90 static_assert( ! output_iterator
< list
<int>::const_iterator
, int > );
91 static_assert( ! output_iterator
< list
<B
>::const_iterator
, B
> );
93 static_assert( ! output_iterator
< set
<int>::iterator
, int > );
94 static_assert( ! output_iterator
< set
<B
>::iterator
, B
> );
95 static_assert( ! output_iterator
< set
<int>::const_iterator
, int > );
96 static_assert( ! output_iterator
< set
<B
>::const_iterator
, B
> );
98 static_assert( output_iterator
< string::iterator
, char > );
99 static_assert( output_iterator
< string::iterator
, int > );
100 static_assert( ! output_iterator
< string::const_iterator
, char > );
101 static_assert( ! output_iterator
< string::const_iterator
, int > );
103 static_assert( ! output_iterator
< string_view::iterator
, char > );
104 static_assert( ! output_iterator
< string_view::iterator
, int > );
105 static_assert( ! output_iterator
< string_view::const_iterator
, char > );
106 static_assert( ! output_iterator
< string_view::const_iterator
, int > );
108 static_assert( output_iterator
< vector
<int>::iterator
, int > );
109 static_assert( output_iterator
< vector
<B
>::iterator
, B
> );
110 static_assert( ! output_iterator
< vector
<int>::const_iterator
, int > );
111 static_assert( ! output_iterator
< vector
<B
>::const_iterator
, B
> );
115 using std::istreambuf_iterator
;
116 using std::ostreambuf_iterator
;
118 static_assert( ! output_iterator
< istreambuf_iterator
<char>, char > );
119 static_assert( ! output_iterator
< istreambuf_iterator
<char>, int > );
120 static_assert( output_iterator
< ostreambuf_iterator
<char>, char > );
121 static_assert( output_iterator
< ostreambuf_iterator
<char>, int > );