diff options
Diffstat (limited to 'src/boost/libs/parameter/test/deduced.cpp')
-rw-r--r-- | src/boost/libs/parameter/test/deduced.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/src/boost/libs/parameter/test/deduced.cpp b/src/boost/libs/parameter/test/deduced.cpp new file mode 100644 index 00000000..359685fd --- /dev/null +++ b/src/boost/libs/parameter/test/deduced.cpp @@ -0,0 +1,182 @@ +// 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/parameters.hpp> +#include <boost/parameter/name.hpp> +#include <boost/parameter/binding.hpp> +#include <boost/parameter/config.hpp> +#include "deduced.hpp" + +#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_convertible.hpp> +#endif + +#if defined(LIBS_PARAMETER_TEST_COMPILE_FAILURE) +#include <boost/parameter/aux_/preprocessor/nullptr.hpp> +#endif + +namespace test { + + BOOST_PARAMETER_NAME(x) + BOOST_PARAMETER_NAME(y) + BOOST_PARAMETER_NAME(z) + + template <typename To> + struct predicate + { + template <typename From, typename Args> +#if defined(BOOST_PARAMETER_CAN_USE_MP11) + using fn = std::is_convertible<From,To>; +#else + struct apply + : boost::mpl::if_< + boost::is_convertible<From,To> + , boost::mpl::true_ + , boost::mpl::false_ + > + { + }; +#endif + }; +} // namespace test + +#include <boost/core/lightweight_test.hpp> +#include <string> + +int main() +{ + test::check< + boost::parameter::parameters<test::tag::x,test::tag::y> + >((test::_x = 0, test::_y = 1), 0, 1); + + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + ( + test::_x = 0 + , test::_y = test::not_present + , test::_z = std::string("foo") + ) + , test::_x = 0 + , std::string("foo") + ); + + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + (test::_x = 0, test::_y = 1, test::_z = std::string("foo")) + , 0 + , std::string("foo") + , 1 + ); + + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + (test::_x = 0, test::_y = 1, test::_z = std::string("foo")) + , 0 + , 1 + , std::string("foo") + ); + + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + (test::_x = 0, test::_y = 1, test::_z = std::string("foo")) + , 0 + , test::_y = 1 + , std::string("foo") + ); + + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + (test::_x = 0, test::_y = 1, test::_z = std::string("foo")) + , test::_z = std::string("foo") + , test::_x = 0 + , 1 + ); + +#if defined(LIBS_PARAMETER_TEST_COMPILE_FAILURE) + // Fails because boost::parameter::aux::make_arg_list<> evaluates + // boost::parameter::aux::is_named_argument<> to boost::mpl::false_ + // for static_cast<long*>(BOOST_PARAMETER_AUX_PP_NULLPTR). + test::check< + boost::parameter::parameters< + test::tag::x + , boost::parameter::required< + boost::parameter::deduced<test::tag::y> + , test::predicate<int> + > + , boost::parameter::optional< + boost::parameter::deduced<test::tag::z> + , test::predicate<std::string> + > + > + >( + (test::_x = 0, test::_y = 1, test::_z = std::string("foo")) + , test::_x = 0 + , static_cast<long*>(BOOST_PARAMETER_AUX_PP_NULLPTR) + , 1 + ); +#endif + + return boost::report_errors(); +} + |