constexpr const_reference
operator[](size_type __n) const noexcept
{
+#if __cplusplus >= 201402L
__glibcxx_requires_subscript(__n);
+#endif
return _AT_Type::_S_ref(_M_elems, __n);
}
constexpr const_reference
front() const noexcept
{
+#if __cplusplus >= 201402L
__glibcxx_requires_nonempty();
+#endif
return _AT_Type::_S_ref(_M_elems, 0);
}
constexpr const_reference
back() const noexcept
{
+#if __cplusplus >= 201402L
__glibcxx_requires_nonempty();
+#endif
return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
: _AT_Type::_S_ref(_M_elems, 0);
}
--- /dev/null
+// { dg-options "-std=gnu++11 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++11 } }
+
+// Copyright (C) 2011-2020 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/>.
+
+#include <array>
+
+void test01()
+{
+ // array
+ constexpr std::array<std::size_t, 6> a = { { 0, 55, 66, 99, 4115, 2 } };
+ constexpr auto v1 = a[1];
+ constexpr auto v2 = a.at(2);
+ constexpr auto v3 = a.front();
+ constexpr auto v4 = a.back();
+ static_assert( (v1 + v2 + v3 + v4) == (55 + 66 + 0 + 2), "" );
+}
#include <array>
-int main()
+void test01()
{
// array
- typedef std::array<std::size_t, 6> array_type;
- constexpr array_type a = { { 0, 55, 66, 99, 4115, 2 } };
- constexpr auto v1 __attribute__((unused)) = a[1];
- constexpr auto v2 __attribute__((unused)) = a.at(2);
- constexpr auto v3 __attribute__((unused)) = a.front();
- constexpr auto v4 __attribute__((unused)) = a.back();
- return 0;
+ constexpr std::array<std::size_t, 6> a = { { 0, 55, 66, 99, 4115, 2 } };
+ constexpr auto v1 = a[1];
+ constexpr auto v2 = a.at(2);
+ constexpr auto v3 = a.front();
+ constexpr auto v4 = a.back();
+ static_assert( (v1 + v2 + v3 + v4) == (55 + 66 + 0 + 2), "" );
}
int n2 = std::get<1>(std::move(a));
int n3 = std::get<1>(ca);
-// { dg-error "static assertion failed" "" { target *-*-* } 357 }
-// { dg-error "static assertion failed" "" { target *-*-* } 365 }
-// { dg-error "static assertion failed" "" { target *-*-* } 373 }
+// { dg-error "static assertion failed" "" { target *-*-* } 363 }
+// { dg-error "static assertion failed" "" { target *-*-* } 371 }
+// { dg-error "static assertion failed" "" { target *-*-* } 379 }