diff --git a/include/boost/test/impl/decorator.ipp b/include/boost/test/impl/decorator.ipp index 0cc562ee2f..5fd2857a66 100644 --- a/include/boost/test/impl/decorator.ipp +++ b/include/boost/test/impl/decorator.ipp @@ -18,6 +18,7 @@ // Boost.Test #include #include +#include #include #if BOOST_TEST_SUPPORT_TOKEN_ITERATOR diff --git a/include/boost/test/impl/progress_monitor.ipp b/include/boost/test/impl/progress_monitor.ipp index 34149745cf..1f6245c10b 100644 --- a/include/boost/test/impl/progress_monitor.ipp +++ b/include/boost/test/impl/progress_monitor.ipp @@ -17,6 +17,7 @@ // Boost.Test #include +#include #include #include diff --git a/include/boost/test/impl/results_collector.ipp b/include/boost/test/impl/results_collector.ipp index ea5050937b..c5236a0f0c 100644 --- a/include/boost/test/impl/results_collector.ipp +++ b/include/boost/test/impl/results_collector.ipp @@ -16,6 +16,7 @@ // Boost.Test #include #include +#include #include #include diff --git a/include/boost/test/impl/test_framework_init_observer.ipp b/include/boost/test/impl/test_framework_init_observer.ipp index 89f854aaed..9c85f25ef1 100644 --- a/include/boost/test/impl/test_framework_init_observer.ipp +++ b/include/boost/test/impl/test_framework_init_observer.ipp @@ -14,6 +14,7 @@ // Boost.Test #include +#include #include #include diff --git a/include/boost/test/impl/trivial_singleton.ipp b/include/boost/test/impl/trivial_singleton.ipp new file mode 100644 index 0000000000..b8feac3e31 --- /dev/null +++ b/include/boost/test/impl/trivial_singleton.ipp @@ -0,0 +1,26 @@ +// (C) Copyright Gennadiy Rozental 2001. +// (C) Antony Polukhin 2018. +// 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) + +// This header must be included ONLY in the *.ipp files to avoid issues with visibility. +// See the long discussion starting +// from https://github.com/boostorg/boost/pull/190#issuecomment-422197454 + +#ifndef BOOST_TEST_IMPL_TRIVIAL_SIGNLETON_IPP +#define BOOST_TEST_IMPL_TRIVIAL_SIGNLETON_IPP + +#include + +namespace boost { namespace unit_test { + +template +Derived& singleton::instance() { + static Derived the_inst; + return the_inst; +} + +}} + +#endif // BOOST_TEST_IMPL_TRIVIAL_SIGNLETON_IPP diff --git a/include/boost/test/impl/unit_test_log.ipp b/include/boost/test/impl/unit_test_log.ipp index 2a6c0f4bc6..e26a370d8d 100644 --- a/include/boost/test/impl/unit_test_log.ipp +++ b/include/boost/test/impl/unit_test_log.ipp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include diff --git a/include/boost/test/impl/unit_test_monitor.ipp b/include/boost/test/impl/unit_test_monitor.ipp index cfb41a239c..fb16ff8f32 100644 --- a/include/boost/test/impl/unit_test_monitor.ipp +++ b/include/boost/test/impl/unit_test_monitor.ipp @@ -18,6 +18,7 @@ // Boost.Test #include +#include #include #include #include diff --git a/include/boost/test/utils/runtime/errors.hpp b/include/boost/test/utils/runtime/errors.hpp index 5b263d21c5..056a823e33 100644 --- a/include/boost/test/utils/runtime/errors.hpp +++ b/include/boost/test/utils/runtime/errors.hpp @@ -37,7 +37,7 @@ namespace runtime { // ************** runtime::param_error ************** // // ************************************************************************** // -class param_error : public std::exception { +class BOOST_SYMBOL_VISIBLE param_error : public std::exception { public: ~param_error() BOOST_NOEXCEPT_OR_NOTHROW {} @@ -55,7 +55,7 @@ class param_error : public std::exception { //____________________________________________________________________________// -class init_error : public param_error { +class BOOST_SYMBOL_VISIBLE init_error : public param_error { protected: explicit init_error( cstring param_name ) : param_error( param_name ) {} ~init_error() BOOST_NOEXCEPT_OR_NOTHROW {} @@ -70,7 +70,7 @@ class input_error : public param_error { //____________________________________________________________________________// template -class specific_param_error : public Base { +class BOOST_SYMBOL_VISIBLE specific_param_error : public Base { protected: explicit specific_param_error( cstring param_name ) : Base( param_name ) {} ~specific_param_error() BOOST_NOEXCEPT_OR_NOTHROW {} @@ -155,7 +155,7 @@ SPECIFIC_EX_TYPE( missing_req_arg, input_error ); #undef SPECIFIC_EX_TYPE -class ambiguous_param : public specific_param_error { +class BOOST_SYMBOL_VISIBLE ambiguous_param : public specific_param_error { public: #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES explicit ambiguous_param( std::vector&& amb_candidates ) diff --git a/include/boost/test/utils/trivial_singleton.hpp b/include/boost/test/utils/trivial_singleton.hpp index ac612b6393..a5ca5633d2 100644 --- a/include/boost/test/utils/trivial_singleton.hpp +++ b/include/boost/test/utils/trivial_singleton.hpp @@ -34,7 +34,7 @@ namespace unit_test { template class singleton { public: - static Derived& instance() { static Derived the_inst; return the_inst; } + BOOST_TEST_DECL static Derived& instance(); BOOST_DELETED_FUNCTION(singleton(singleton const&)) BOOST_DELETED_FUNCTION(singleton& operator=(singleton const&))