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 // <array> 10 11 // An array is a contiguous container 12 13 #include <array> 14 #include <cassert> 15 16 #include "test_macros.h" 17 18 template <class Container> 19 TEST_CONSTEXPR_CXX14 void assert_contiguous(Container const& c) 20 { 21 for (size_t i = 0; i < c.size(); ++i) 22 assert(*(c.begin() + i) == *(std::addressof(*c.begin()) + i)); 23 } 24 25 TEST_CONSTEXPR_CXX17 bool tests() 26 { 27 assert_contiguous(std::array<double, 0>()); 28 assert_contiguous(std::array<double, 1>()); 29 assert_contiguous(std::array<double, 2>()); 30 assert_contiguous(std::array<double, 3>()); 31 32 assert_contiguous(std::array<char, 0>()); 33 assert_contiguous(std::array<char, 1>()); 34 assert_contiguous(std::array<char, 2>()); 35 assert_contiguous(std::array<char, 3>()); 36 37 return true; 38 } 39 40 int main(int, char**) 41 { 42 tests(); 43 #if TEST_STD_VER >= 17 // begin() & friends are constexpr in >= C++17 only 44 static_assert(tests(), ""); 45 #endif 46 return 0; 47 } 48