diff --git a/include/boost/pfr/detail/core_name20_static.hpp b/include/boost/pfr/detail/core_name20_static.hpp index 7334530..e54d95e 100644 --- a/include/boost/pfr/detail/core_name20_static.hpp +++ b/include/boost/pfr/detail/core_name20_static.hpp @@ -206,6 +206,10 @@ constexpr std::string_view get_name() noexcept { !std::is_union::value, "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info." ); + static_assert( + !std::is_array::value, + "====================> Boost.PFR: It is impossible to extract name from old C array since it doesn't have named members" + ); static_assert( sizeof(T) && BOOST_PFR_USE_CPP17, "====================> Boost.PFR: Extraction of field's names is allowed only when the BOOST_PFR_USE_CPP17 macro enabled." @@ -220,6 +224,10 @@ constexpr auto tie_as_names_tuple() noexcept { !std::is_union::value, "====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info." ); + static_assert( + !std::is_array::value, + "====================> Boost.PFR: It is impossible to extract name from old C array since it doesn't have named members" + ); static_assert( sizeof(T) && BOOST_PFR_USE_CPP17, "====================> Boost.PFR: Extraction of field's names is allowed only when the BOOST_PFR_USE_CPP17 macro enabled." diff --git a/test/core_name/compile-fail/fields_names_get_name_on_array.cpp b/test/core_name/compile-fail/fields_names_get_name_on_array.cpp new file mode 100644 index 0000000..78f48d9 --- /dev/null +++ b/test/core_name/compile-fail/fields_names_get_name_on_array.cpp @@ -0,0 +1,17 @@ +// Copyright (c) 2023 Bela Schaum, X-Ryl669, Denis Mikhailov. +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// Initial implementation by Bela Schaum, https://github.com/schaumb +// The way to make it union and UB free by X-Ryl669, https://github.com/X-Ryl669 +// + +#include + +int main() { + (void)boost::pfr::get_name<0, int[10]>(); // Must be a compile time error +} + + diff --git a/test/core_name/compile-fail/fields_names_names_as_array_on_array.cpp b/test/core_name/compile-fail/fields_names_names_as_array_on_array.cpp new file mode 100644 index 0000000..a509355 --- /dev/null +++ b/test/core_name/compile-fail/fields_names_names_as_array_on_array.cpp @@ -0,0 +1,17 @@ +// Copyright (c) 2023 Bela Schaum, X-Ryl669, Denis Mikhailov. +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// Initial implementation by Bela Schaum, https://github.com/schaumb +// The way to make it union and UB free by X-Ryl669, https://github.com/X-Ryl669 +// + +#include + +int main() { + (void)boost::pfr::names_as_array(); // Must be a compile time error +} + +