fb5683766b
Replace BOOST_TTI_DETAIL_NULLPTR with BOOST_PARAMETER_AUX_PP_NULLPTR.
183 lines
4.9 KiB
C++
183 lines
4.9 KiB
C++
// 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();
|
|
}
|
|
|