]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/testsuite/24_iterators/input/concept.cc
Apply C++20 changes to various iterator types
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 24_iterators / input / concept.cc
diff --git a/libstdc++-v3/testsuite/24_iterators/input/concept.cc b/libstdc++-v3/testsuite/24_iterators/input/concept.cc
new file mode 100644 (file)
index 0000000..80bb679
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright (C) 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 <iterator>
+
+using std::input_iterator;
+
+static_assert( input_iterator< int*        > );
+static_assert( input_iterator< const int* > );
+static_assert( input_iterator< void**      > );
+
+static_assert( ! input_iterator< int* const    > );
+static_assert( ! input_iterator< const int* const      > );
+static_assert( ! input_iterator< void** const  > );
+
+static_assert( ! input_iterator< void*   > );
+static_assert( ! input_iterator< const void*     > );
+static_assert( ! input_iterator< volatile void* > );
+
+static_assert( ! input_iterator< void(*)() > );
+static_assert( ! input_iterator< void(&)() > );
+
+struct A;
+static_assert( ! input_iterator< void(A::*)() > );
+static_assert( ! input_iterator< int A::*      > );
+
+#include <array>
+#include <deque>
+#include <forward_list>
+#include <list>
+#include <string>
+#include <string_view>
+#include <vector>
+
+using std::array;
+using std::deque;
+using std::forward_list;
+using std::list;
+using std::string;
+using std::string_view;
+using std::vector;
+
+struct B { };
+
+static_assert( input_iterator< array<int, 1>::iterator     > );
+static_assert( input_iterator< array<B, 1>::const_iterator  > );
+
+static_assert( input_iterator< deque<int>::iterator    > );
+static_assert( input_iterator< deque<B>::const_iterator        > );
+
+static_assert( input_iterator< forward_list<int>::iterator     > );
+static_assert( input_iterator< forward_list<B>::const_iterator > );
+
+static_assert( input_iterator< list<int>::iterator     > );
+static_assert( input_iterator< list<B>::const_iterator > );
+
+static_assert( input_iterator< string::iterator              > );
+static_assert( input_iterator< string::const_iterator > );
+
+static_assert( input_iterator< string_view::iterator       > );
+static_assert( input_iterator< string_view::const_iterator  > );
+
+static_assert( input_iterator< vector<int>::iterator     > );
+static_assert( input_iterator< vector<B>::const_iterator  > );
+
+#include <streambuf>
+
+using std::istreambuf_iterator;
+using std::ostreambuf_iterator;
+
+static_assert( input_iterator< istreambuf_iterator<char>    > );
+static_assert( ! input_iterator< ostreambuf_iterator<char>  > );