diff --git a/include/boost/array.hpp b/include/boost/array.hpp index 7c40dfbe..4b76a15c 100644 --- a/include/boost/array.hpp +++ b/include/boost/array.hpp @@ -458,13 +458,13 @@ namespace boost { } template - T &get(boost::array &arr) BOOST_NOEXCEPT { + BOOST_CXX14_CONSTEXPR T &get(boost::array &arr) BOOST_NOEXCEPT { BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(boost::array &) index out of range" ); return arr[Idx]; } template - const T &get(const boost::array &arr) BOOST_NOEXCEPT { + BOOST_CONSTEXPR const T &get(const boost::array &arr) BOOST_NOEXCEPT { BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(const boost::array &) index out of range" ); return arr[Idx]; } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 2a41c8fa..4236865b 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -55,6 +55,7 @@ compile array_data_test_cx.cpp ; compile array_iterator_test_cx.cpp ; compile array_size_test_cx.cpp ; compile array_access_test_cx.cpp ; +compile array_get_test_cx.cpp ; # C++14 constexpr diff --git a/test/array_get_test_cx.cpp b/test/array_get_test_cx.cpp new file mode 100644 index 00000000..eb7f1174 --- /dev/null +++ b/test/array_get_test_cx.cpp @@ -0,0 +1,42 @@ +// 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") + +#elif BOOST_WORKAROUND(BOOST_GCC, < 50000) + +BOOST_PRAGMA_MESSAGE("Test skipped because BOOST_GCC < 50000") + +#else + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +template void test() +{ + constexpr boost::array a = {{ 1, 2, 3, 4 }}; + + STATIC_ASSERT( boost::get<0>( a ) == 1 ); + STATIC_ASSERT( boost::get<1>( a ) == 2 ); + STATIC_ASSERT( boost::get<2>( a ) == 3 ); + STATIC_ASSERT( boost::get<3>( a ) == 4 ); +} + +int main() +{ + test(); +} + +#endif