diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/parameter/test/ntp.cpp | |
parent | Initial commit. (diff) | |
download | ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/parameter/test/ntp.cpp')
-rw-r--r-- | src/boost/libs/parameter/test/ntp.cpp | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/src/boost/libs/parameter/test/ntp.cpp b/src/boost/libs/parameter/test/ntp.cpp new file mode 100644 index 00000000..c48628f0 --- /dev/null +++ b/src/boost/libs/parameter/test/ntp.cpp @@ -0,0 +1,337 @@ +// Copyright Daniel Wallin 2006. +// 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) + +#include <boost/parameter/config.hpp> + +#if (BOOST_PARAMETER_MAX_ARITY < 4) +#error Define BOOST_PARAMETER_MAX_ARITY as 4 or greater. +#endif + +namespace test { + + struct X + { + }; + + struct Y : X + { + }; +} // namespace test + +#if defined(BOOST_PARAMETER_CAN_USE_MP11) +#include <type_traits> +#else +#include <boost/mpl/bool.hpp> +#include <boost/mpl/if.hpp> +#include <boost/type_traits/is_base_of.hpp> +#include <boost/type_traits/remove_const.hpp> +#include <boost/type_traits/remove_reference.hpp> +#endif + +namespace test { + + struct Z + { + template <typename T, typename Args> +#if defined(BOOST_PARAMETER_CAN_USE_MP11) + using fn = std::is_base_of< + X + , typename std::remove_const< + typename std::remove_reference<T>::type + >::type + >; +#else + struct apply + : boost::mpl::if_< + boost::is_base_of< + X + , typename boost::remove_const< + typename boost::remove_reference<T>::type + >::type + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + { + }; +#endif // BOOST_PARAMETER_CAN_USE_MP11 + }; +} // namespace test + +#include <boost/parameter/template_keyword.hpp> + +namespace test { + + template <typename T = int> + struct a0_is : boost::parameter::template_keyword<test::a0_is<>,T> + { + }; + + template <typename T = int> + struct a1_is : boost::parameter::template_keyword<test::a1_is<>,T> + { + }; + + template <typename T = int> + struct a2_is : boost::parameter::template_keyword<test::a2_is<>,T> + { + }; + + template <typename T = int> + struct a3_is : boost::parameter::template_keyword<test::a3_is<>,T> + { + }; +} // namespace test + +#include <boost/parameter/parameters.hpp> +#include <boost/parameter/optional.hpp> +#include <boost/parameter/deduced.hpp> +#include <boost/parameter/binding.hpp> + +namespace test { + + template < + typename A0 = boost::parameter::void_ + , typename A1 = boost::parameter::void_ + , typename A2 = boost::parameter::void_ + , typename A3 = boost::parameter::void_ + > + struct with_ntp + { + typedef typename boost::parameter::parameters< + test::a0_is<> + , test::a1_is<> + , test::a2_is<> + , boost::parameter::optional< + boost::parameter::deduced<test::a3_is<> > + , Z + > + >::BOOST_NESTED_TEMPLATE bind< + A0 + , A1 + , A2 + , A3 +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + , boost::parameter::void_ +#endif + >::type args; + typedef typename boost::parameter::binding< + args + , test::a0_is<> + , void* + >::type a0; + typedef typename boost::parameter::binding< + args + , test::a1_is<> + , void* + >::type a1; + typedef typename boost::parameter::binding< + args + , test::a2_is<> + , void* + >::type a2; + typedef typename boost::parameter::binding< + args + , test::a3_is<> + , void* + >::type a3; + typedef void(*type)(a0, a1, a2, a3); + }; +} // namespace test + +#include <boost/mpl/aux_/test.hpp> + +#if !defined(BOOST_PARAMETER_CAN_USE_MP11) +#include <boost/mpl/assert.hpp> +#include <boost/type_traits/is_same.hpp> +#endif + +MPL_TEST_CASE() +{ +#if defined(BOOST_PARAMETER_CAN_USE_MP11) + static_assert( + std::is_same< + test::with_ntp<>::type + , void(*)(void*, void*, void*, void*) + >::value + , "type must be void(*)(void*, void*, void*, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<test::a2_is<int> >::type + , void(*)(void*, void*, int, void*) + >::value + , "type must be void(*)(void*, void*, int, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<test::a1_is<int> >::type + , void(*)(void*, int, void*, void*) + >::value + , "type must be void(*)(void*, int, void*, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<test::a2_is<int const>,test::a1_is<float> >::type + , void(*)(void*, float, int const, void*) + >::value + , "type must be void(*)(void*, float, int const, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<int const>::type + , void(*)(int const, void*, void*, void*) + >::value + , "type must be void(*)(int const, void*, void*, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<int,float>::type + , void(*)(int, float, void*, void*) + >::value + , "type must be void(*)(int, float, void*, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<int,float,char>::type + , void(*)(int, float, char, void*) + >::value + , "type must be void(*)(int, float, char, void*)" + ); + static_assert( + std::is_same< + test::with_ntp<test::a0_is<int>,test::Y>::type + , void(*)(int, void*, void*, test::Y) + >::value + , "type must be must be void(*)(int, void*, void*, test::Y)" + ); + static_assert( + std::is_same< + test::with_ntp<int&,test::a2_is<char>,test::Y>::type + , void(*)(int&, void*, char, test::Y) + >::value + , "type must be void(*)(int&, void*, char, test::Y)" + ); +#else // !defined(BOOST_PARAMETER_CAN_USE_MP11) + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<>::type + , void(*)(void*, void*, void*, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<test::a2_is<int> >::type + , void(*)(void*, void*, int, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<test::a1_is<int> >::type + , void(*)(void*, int, void*, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp< + test::a2_is<int const> + , test::a1_is<float> + >::type + , void(*)(void*, float, int const, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<int const>::type + , void(*)(int const, void*, void*, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<int,float>::type + , void(*)(int, float, void*, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<int,float,char>::type + , void(*)(int, float, char, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<test::a0_is<int>,test::Y>::type + , void(*)(int, void*, void*, test::Y) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<int&,test::a2_is<char>,test::Y>::type + , void(*)(int&, void*, char, test::Y) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); +#endif // BOOST_PARAMETER_CAN_USE_MP11 + + typedef int test_array[1]; + typedef void(*test_function)(); + +#if defined(BOOST_PARAMETER_CAN_USE_MP11) + static_assert( + std::is_same< + test::with_ntp<test_array,test_function>::type + , void(*)(test_array&, test_function, void*, void*) + >::value + , "type must be void(*)(test_array&, test_function, void*, void*)" + ); +#else + BOOST_MPL_ASSERT(( + boost::mpl::if_< + boost::is_same< + test::with_ntp<test_array,test_function>::type + , void(*)(test_array&, test_function, void*, void*) + > + , boost::mpl::true_ + , boost::mpl::false_ + >::type + )); +#endif +} + |