diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 58dc761..1c65f9e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -54,6 +54,7 @@ compile array_copy_test_cx.cpp ; compile array_data_test_cx.cpp ; compile array_iterator_test_cx.cpp ; compile array_size_test_cx.cpp ; +compile array_access_test_cx.cpp ; # diff --git a/test/array_access_test_cx.cpp b/test/array_access_test_cx.cpp new file mode 100644 index 0000000..a5534db --- /dev/null +++ b/test/array_access_test_cx.cpp @@ -0,0 +1,46 @@ +// Copyright 2025 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#if defined(BOOST_NO_CXX11_CONSTEXPR) + +BOOST_PRAGMA_MESSAGE("Test skipped because BOOST_NO_CXX11_CONSTEXPR is defined") + +#elif BOOST_WORKAROUND(BOOST_MSVC, < 1910) + +BOOST_PRAGMA_MESSAGE("Test skipped because BOOST_MSVC < 1910") + +#else + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +template void test() +{ + constexpr boost::array a = {{}}; + + STATIC_ASSERT( &a[ 0 ] == a.data() + 0 ); + STATIC_ASSERT( &a[ 1 ] == a.data() + 1 ); + STATIC_ASSERT( &a[ 2 ] == a.data() + 2 ); + STATIC_ASSERT( &a[ 3 ] == a.data() + 3 ); + + STATIC_ASSERT( &a.at( 0 ) == a.data() + 0 ); + STATIC_ASSERT( &a.at( 1 ) == a.data() + 1 ); + STATIC_ASSERT( &a.at( 2 ) == a.data() + 2 ); + STATIC_ASSERT( &a.at( 3 ) == a.data() + 3 ); + + STATIC_ASSERT( &a.front() == a.data() ); + STATIC_ASSERT( &a.back() == a.data() + 3 ); +} + +int main() +{ + test(); +} + +#endif