diff --git a/include/boost/pfr/config.hpp b/include/boost/pfr/config.hpp index 63ff47d..8ab6f18 100644 --- a/include/boost/pfr/config.hpp +++ b/include/boost/pfr/config.hpp @@ -8,7 +8,14 @@ #define BOOST_PFR_CONFIG_HPP #pragma once +#if __cplusplus >= 201402L || (defined(_MSC_VER) && defined(_MSVC_LANG) && _MSC_VER > 1900) #include // to get non standard platform macro definitions (__GLIBCXX__ for example) +#endif + +/// \file boost/pfr/config.hpp +/// Contains all the macros that describe Boost.PFR configuration, like BOOST_PFR_ENABLED +/// +/// \note This header file doesn't require C++14 Standard and supports all C++ compilers, even pre C++14 compilers (C++11, C++03...). // Reminder: // * MSVC++ 14.2 _MSC_VER == 1927 <- Loophole is known to work (Visual Studio ????) diff --git a/test/Jamfile b/test/Jamfile new file mode 100644 index 0000000..de6f4c0 --- /dev/null +++ b/test/Jamfile @@ -0,0 +1,9 @@ +# Copyright (C) 2023 Denis Mikhailov +# +# Use, modification and distribution is subject to 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) +# + +build-project config ; +build-project core ; \ No newline at end of file diff --git a/test/appveyor.yml b/test/appveyor.yml index 67ca68f..8dd154d 100644 --- a/test/appveyor.yml +++ b/test/appveyor.yml @@ -32,6 +32,10 @@ skip_tags: true environment: matrix: + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + TOOLSET: msvc-9.0 + ADDRMD: 32 + CXXSTD: latest # fake # - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 # TOOLSET: msvc # TODO: clang-win ??? # ADDRMD: 32,64 diff --git a/test/config/Jamfile.v2 b/test/config/Jamfile.v2 new file mode 100644 index 0000000..240d039 --- /dev/null +++ b/test/config/Jamfile.v2 @@ -0,0 +1,22 @@ +# Copyright (C) 2023 Denis Mikhailov +# +# Use, modification and distribution is subject to 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) +# + +import python ; +import testing ; +import ../../config/checks/config : requires ; + +project + : source-location . + : requirements + BOOST_PFR_DETAIL_STRICT_RVALUE_TESTING=1 + ; + + +test-suite pfr_tests + : + [ run print_config.cpp : : : always_show_run_output : auto_engine_config ] + ; diff --git a/test/print_config.cpp b/test/config/print_config.cpp similarity index 100% rename from test/print_config.cpp rename to test/config/print_config.cpp diff --git a/test/Jamfile.v2 b/test/core/Jamfile.v2 similarity index 89% rename from test/Jamfile.v2 rename to test/core/Jamfile.v2 index b1e1558..6e0d006 100644 --- a/test/Jamfile.v2 +++ b/test/core/Jamfile.v2 @@ -40,7 +40,7 @@ explicit compiler_supports_loophole ; local DISABLE_ON_MSVC = ; #msvc:no ; local REQUIRE_LOOPHOLE = - [ check-target-builds ../test//compiler_supports_loophole : : no ] + [ check-target-builds ../core//compiler_supports_loophole : : no ] ; local STRUCTURED_BINDING_ENGINE = BOOST_PFR_USE_LOOPHOLE=0 BOOST_PFR_USE_CPP17=1 [ requires cxx17_structured_bindings ] ; @@ -49,8 +49,6 @@ local CLASSIC_ENGINE = BOOST_PFR_USE_LOOPHOLE=0 BOOST_PFR_USE_CP test-suite pfr_tests : - [ run print_config.cpp : : : always_show_run_output : auto_engine_config ] - [ run offset_based_getter.cpp ] [ run can_be_as_fallback_in_the_fusion.cpp ] @@ -62,9 +60,9 @@ test-suite pfr_tests [ run test_tuple_sizes_on.cpp : : : BOOST_PFR_RUN_TEST_ON="std::size_t" : test_tuple_sizes_on_size_ts ] [ run run/motivating_example.cpp : : : : auto_engine_motivating ] - [ run ../example/sample_printing.cpp : : : : auto_engine_sample_printing ] - [ run ../example/get.cpp : : : : auto_engine_get ] - [ run ../example/quick_examples.cpp : : : : auto_engine_quick ] + [ run ../../example/sample_printing.cpp : : : : auto_engine_sample_printing ] + [ run ../../example/get.cpp : : : : auto_engine_get ] + [ run ../../example/quick_examples.cpp : : : : auto_engine_quick ] ; local BLACKLIST_TESTS_FOR_LOOPHOLE = @@ -97,7 +95,7 @@ local BLACKLIST_TESTS_FOR_CLASSIC = tie_anonymous_const_field ; -for local source_file in [ glob ./run/*.cpp ] [ glob ../example/*.cpp ] +for local source_file in [ glob ./run/*.cpp ] [ glob ../../example/*.cpp ] { local target_name = $(source_file[1]:B) ; pfr_tests += [ run $(source_file) : : : $(STRUCTURED_BINDING_ENGINE) : $(target_name)_sb ] ; @@ -131,5 +129,5 @@ for local source_file in [ glob ./compile-fail/*.cpp ] if [ python.configured ] { - testing.make-test run-pyd : ../misc/generate_cpp17.py ; + testing.make-test run-pyd : ../../misc/generate_cpp17.py ; } diff --git a/test/can_be_as_fallback_in_the_fusion.cpp b/test/core/can_be_as_fallback_in_the_fusion.cpp similarity index 100% rename from test/can_be_as_fallback_in_the_fusion.cpp rename to test/core/can_be_as_fallback_in_the_fusion.cpp diff --git a/test/compile-fail/boost_pfr_disabled_via_macro.cpp b/test/core/compile-fail/boost_pfr_disabled_via_macro.cpp similarity index 100% rename from test/compile-fail/boost_pfr_disabled_via_macro.cpp rename to test/core/compile-fail/boost_pfr_disabled_via_macro.cpp diff --git a/test/compile-fail/fields_count_on_reference.cpp b/test/core/compile-fail/fields_count_on_reference.cpp similarity index 100% rename from test/compile-fail/fields_count_on_reference.cpp rename to test/core/compile-fail/fields_count_on_reference.cpp diff --git a/test/compile-fail/inherited.cpp b/test/core/compile-fail/inherited.cpp similarity index 100% rename from test/compile-fail/inherited.cpp rename to test/core/compile-fail/inherited.cpp diff --git a/test/compile-fail/inherited_nonempty.cpp b/test/core/compile-fail/inherited_nonempty.cpp similarity index 100% rename from test/compile-fail/inherited_nonempty.cpp rename to test/core/compile-fail/inherited_nonempty.cpp diff --git a/test/compile-fail/movable_and_lvalue_references.cpp b/test/core/compile-fail/movable_and_lvalue_references.cpp similarity index 100% rename from test/compile-fail/movable_and_lvalue_references.cpp rename to test/core/compile-fail/movable_and_lvalue_references.cpp diff --git a/test/compile-fail/non_aggregate.cpp b/test/core/compile-fail/non_aggregate.cpp similarity index 100% rename from test/compile-fail/non_aggregate.cpp rename to test/core/compile-fail/non_aggregate.cpp diff --git a/test/compile-fail/ops_on_union.cpp b/test/core/compile-fail/ops_on_union.cpp similarity index 100% rename from test/compile-fail/ops_on_union.cpp rename to test/core/compile-fail/ops_on_union.cpp diff --git a/test/compile-fail/ops_unions.cpp b/test/core/compile-fail/ops_unions.cpp similarity index 100% rename from test/compile-fail/ops_unions.cpp rename to test/core/compile-fail/ops_unions.cpp diff --git a/test/compile-fail/ops_unrestricted_unions.cpp b/test/core/compile-fail/ops_unrestricted_unions.cpp similarity index 100% rename from test/compile-fail/ops_unrestricted_unions.cpp rename to test/core/compile-fail/ops_unrestricted_unions.cpp diff --git a/test/compile-fail/pfr_review_test2.cpp b/test/core/compile-fail/pfr_review_test2.cpp similarity index 100% rename from test/compile-fail/pfr_review_test2.cpp rename to test/core/compile-fail/pfr_review_test2.cpp diff --git a/test/compile-fail/private_fields.cpp b/test/core/compile-fail/private_fields.cpp similarity index 100% rename from test/compile-fail/private_fields.cpp rename to test/core/compile-fail/private_fields.cpp diff --git a/test/compile-fail/protected_fields.cpp b/test/core/compile-fail/protected_fields.cpp similarity index 100% rename from test/compile-fail/protected_fields.cpp rename to test/core/compile-fail/protected_fields.cpp diff --git a/test/compile-fail/rvalue_tie.cpp b/test/core/compile-fail/rvalue_tie.cpp similarity index 100% rename from test/compile-fail/rvalue_tie.cpp rename to test/core/compile-fail/rvalue_tie.cpp diff --git a/test/compile-fail/virtual_functions.cpp b/test/core/compile-fail/virtual_functions.cpp similarity index 100% rename from test/compile-fail/virtual_functions.cpp rename to test/core/compile-fail/virtual_functions.cpp diff --git a/test/loophole_detection.cpp b/test/core/loophole_detection.cpp similarity index 100% rename from test/loophole_detection.cpp rename to test/core/loophole_detection.cpp diff --git a/test/offset_based_getter.cpp b/test/core/offset_based_getter.cpp similarity index 100% rename from test/offset_based_getter.cpp rename to test/core/offset_based_getter.cpp diff --git a/test/run/bitfields_count.cpp b/test/core/run/bitfields_count.cpp similarity index 100% rename from test/run/bitfields_count.cpp rename to test/core/run/bitfields_count.cpp diff --git a/test/run/constexpr_ops.cpp b/test/core/run/constexpr_ops.cpp similarity index 100% rename from test/run/constexpr_ops.cpp rename to test/core/run/constexpr_ops.cpp diff --git a/test/run/destructuring_tie.cpp b/test/core/run/destructuring_tie.cpp similarity index 100% rename from test/run/destructuring_tie.cpp rename to test/core/run/destructuring_tie.cpp diff --git a/test/run/error_pfr_c1202.cpp b/test/core/run/error_pfr_c1202.cpp similarity index 100% rename from test/run/error_pfr_c1202.cpp rename to test/core/run/error_pfr_c1202.cpp diff --git a/test/run/fields_count_on_const.cpp b/test/core/run/fields_count_on_const.cpp similarity index 100% rename from test/run/fields_count_on_const.cpp rename to test/core/run/fields_count_on_const.cpp diff --git a/test/run/for_each_field.cpp b/test/core/run/for_each_field.cpp similarity index 100% rename from test/run/for_each_field.cpp rename to test/core/run/for_each_field.cpp diff --git a/test/run/functions_for.cpp b/test/core/run/functions_for.cpp similarity index 100% rename from test/run/functions_for.cpp rename to test/core/run/functions_for.cpp diff --git a/test/run/get_const_field.cpp b/test/core/run/get_const_field.cpp similarity index 100% rename from test/run/get_const_field.cpp rename to test/core/run/get_const_field.cpp diff --git a/test/run/get_non_default_constructible.cpp b/test/core/run/get_non_default_constructible.cpp similarity index 100% rename from test/run/get_non_default_constructible.cpp rename to test/core/run/get_non_default_constructible.cpp diff --git a/test/run/get_rvalue.cpp b/test/core/run/get_rvalue.cpp similarity index 100% rename from test/run/get_rvalue.cpp rename to test/core/run/get_rvalue.cpp diff --git a/test/run/is_implicitly_reflectable.cpp b/test/core/run/is_implicitly_reflectable.cpp similarity index 100% rename from test/run/is_implicitly_reflectable.cpp rename to test/core/run/is_implicitly_reflectable.cpp diff --git a/test/run/is_reflectable.cpp b/test/core/run/is_reflectable.cpp similarity index 100% rename from test/run/is_reflectable.cpp rename to test/core/run/is_reflectable.cpp diff --git a/test/run/issue30.cpp b/test/core/run/issue30.cpp similarity index 100% rename from test/run/issue30.cpp rename to test/core/run/issue30.cpp diff --git a/test/run/issue33.cpp b/test/core/run/issue33.cpp similarity index 100% rename from test/run/issue33.cpp rename to test/core/run/issue33.cpp diff --git a/test/run/motivating_example.cpp b/test/core/run/motivating_example.cpp similarity index 100% rename from test/run/motivating_example.cpp rename to test/core/run/motivating_example.cpp diff --git a/test/run/motivating_example2.cpp b/test/core/run/motivating_example2.cpp similarity index 100% rename from test/run/motivating_example2.cpp rename to test/core/run/motivating_example2.cpp diff --git a/test/run/non_copyable_but_movable.cpp b/test/core/run/non_copyable_but_movable.cpp similarity index 100% rename from test/run/non_copyable_but_movable.cpp rename to test/core/run/non_copyable_but_movable.cpp diff --git a/test/run/non_dc_non_cop_but_mov.cpp b/test/core/run/non_dc_non_cop_but_mov.cpp similarity index 100% rename from test/run/non_dc_non_cop_but_mov.cpp rename to test/core/run/non_dc_non_cop_but_mov.cpp diff --git a/test/run/non_default_constructible.cpp b/test/core/run/non_default_constructible.cpp similarity index 100% rename from test/run/non_default_constructible.cpp rename to test/core/run/non_default_constructible.cpp diff --git a/test/run/non_movable.cpp b/test/core/run/non_movable.cpp similarity index 100% rename from test/run/non_movable.cpp rename to test/core/run/non_movable.cpp diff --git a/test/run/non_std_layout.cpp b/test/core/run/non_std_layout.cpp similarity index 100% rename from test/run/non_std_layout.cpp rename to test/core/run/non_std_layout.cpp diff --git a/test/run/ops.cpp b/test/core/run/ops.cpp similarity index 100% rename from test/run/ops.cpp rename to test/core/run/ops.cpp diff --git a/test/run/optional_chrono.cpp b/test/core/run/optional_chrono.cpp similarity index 100% rename from test/run/optional_chrono.cpp rename to test/core/run/optional_chrono.cpp diff --git a/test/run/optional_like.cpp b/test/core/run/optional_like.cpp similarity index 100% rename from test/run/optional_like.cpp rename to test/core/run/optional_like.cpp diff --git a/test/run/read_write.cpp b/test/core/run/read_write.cpp similarity index 100% rename from test/run/read_write.cpp rename to test/core/run/read_write.cpp diff --git a/test/run/read_write_non_literal.cpp b/test/core/run/read_write_non_literal.cpp similarity index 100% rename from test/run/read_write_non_literal.cpp rename to test/core/run/read_write_non_literal.cpp diff --git a/test/run/std_interactions.cpp b/test/core/run/std_interactions.cpp similarity index 100% rename from test/run/std_interactions.cpp rename to test/core/run/std_interactions.cpp diff --git a/test/run/template_constructor.cpp b/test/core/run/template_constructor.cpp similarity index 100% rename from test/run/template_constructor.cpp rename to test/core/run/template_constructor.cpp diff --git a/test/run/template_forwarding_ref.cpp b/test/core/run/template_forwarding_ref.cpp similarity index 100% rename from test/run/template_forwarding_ref.cpp rename to test/core/run/template_forwarding_ref.cpp diff --git a/test/run/template_unconstrained.cpp b/test/core/run/template_unconstrained.cpp similarity index 100% rename from test/run/template_unconstrained.cpp rename to test/core/run/template_unconstrained.cpp diff --git a/test/run/tie_anonymous.cpp b/test/core/run/tie_anonymous.cpp similarity index 100% rename from test/run/tie_anonymous.cpp rename to test/core/run/tie_anonymous.cpp diff --git a/test/run/tie_anonymous_const_field.cpp b/test/core/run/tie_anonymous_const_field.cpp similarity index 100% rename from test/run/tie_anonymous_const_field.cpp rename to test/core/run/tie_anonymous_const_field.cpp diff --git a/test/run/tuple_size.cpp b/test/core/run/tuple_size.cpp similarity index 100% rename from test/run/tuple_size.cpp rename to test/core/run/tuple_size.cpp diff --git a/test/test_tuple_sizes_on.cpp b/test/core/test_tuple_sizes_on.cpp similarity index 100% rename from test/test_tuple_sizes_on.cpp rename to test/core/test_tuple_sizes_on.cpp