]> gcc.gnu.org Git - gcc.git/blame - libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
libstdc++: Change __cpp_lib_array_constexpr for C++17 again
[gcc.git] / libstdc++-v3 / testsuite / 23_containers / array / requirements / constexpr_iter.cc
CommitLineData
e851aa17
JW
1// { dg-options "-std=gnu++17" }
2// { dg-do compile { target c++17 } }
79f31e3d 3//
8d9254fc 4// Copyright (C) 2019-2020 Free Software Foundation, Inc.
79f31e3d
ESR
5//
6// This file is part of the GNU ISO C++ Library. This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11//
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3. If not see
19// <http://www.gnu.org/licenses/>.
20
21#include <array>
22
e851aa17
JW
23#ifndef __cpp_lib_array_constexpr
24# error "Feature test macro for array constexpr is missing in <array>"
40541efe 25#elif __cpp_lib_array_constexpr < 201803L
e851aa17 26# error "Feature test macro for array constexpr has wrong value in <array>"
e851aa17
JW
27#endif
28
40541efe
JW
29// This test is compiled as C++17 because array::iterator is just a pointer,
30// so always meets the C++20 constexpr iterator requirements, even in C++17.
31
79f31e3d
ESR
32constexpr int
33test()
34{
35 constexpr std::array<int, 3> a1{{1, 2, 3}};
36 static_assert(1 == *a1.begin());
37 auto n = a1[0] * a1[1]* a1[2];
38 static_assert(1 == *a1.cbegin());
39
40 std::array<int, 3> a2{{0, 0, 0}};
d37c29f9
ESR
41 auto a1i = a1.begin();
42 auto a1e = a1.end();
43 auto a2i = a2.begin();
44 while (a1i != a1e)
45 *a2i++ = *a1i++;
79f31e3d
ESR
46
47 return n;
48}
49
50void
51run_test()
52{
53 constexpr int n = test();
54}
This page took 0.131883 seconds and 5 git commands to generate.