123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- // 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 < 2)
- #error Define BOOST_PARAMETER_MAX_ARITY as 2 or greater.
- #endif
- #if !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \
- (BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY < 3)
- #error Define BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY \
- as 3 or greater.
- #endif
- namespace test {
- struct count_instances
- {
- count_instances()
- {
- ++count_instances::count;
- }
- count_instances(count_instances const&)
- {
- ++count_instances::count;
- }
- template <typename T>
- count_instances(T const&)
- {
- ++count_instances::count;
- }
- ~count_instances()
- {
- --count_instances::count;
- }
- static std::size_t count;
- void noop() const
- {
- }
- };
- std::size_t count_instances::count = 0;
- } // namespace test
- #include <boost/parameter/name.hpp>
- namespace test {
- BOOST_PARAMETER_NAME(x)
- BOOST_PARAMETER_NAME(y)
- } // namespace test
- #include <boost/parameter/preprocessor.hpp>
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- #include <type_traits>
- #else
- #include <boost/mpl/bool.hpp>
- #include <boost/mpl/if.hpp>
- #include <boost/mpl/assert.hpp>
- #include <boost/type_traits/is_convertible.hpp>
- #endif
- namespace test {
- BOOST_PARAMETER_FUNCTION((int), f, tag,
- (required
- (x, (long))
- )
- (optional
- (y, (long), 2L)
- )
- )
- {
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- static_assert(
- std::is_convertible<x_type,long>::value
- , "is_convertible<x_type,long>"
- );
- static_assert(
- std::is_convertible<y_type,long>::value
- , "is_convertible<y_type,long>"
- );
- #else
- BOOST_MPL_ASSERT((
- typename boost::mpl::if_<
- boost::is_convertible<x_type,long>
- , boost::mpl::true_
- , boost::mpl::false_
- >::type
- ));
- BOOST_MPL_ASSERT((
- typename boost::mpl::if_<
- boost::is_convertible<y_type,long>
- , boost::mpl::true_
- , boost::mpl::false_
- >::type
- ));
- #endif // BOOST_PARAMETER_CAN_USE_MP11
- return 0;
- }
- } // namespace test
- #include <boost/core/lightweight_test.hpp>
- namespace test {
- BOOST_PARAMETER_FUNCTION((int), g, tag,
- (required
- (x, (test::count_instances))
- )
- )
- {
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- static_assert(
- std::is_convertible<x_type,test::count_instances>::value
- , "is_convertible<x_type,test::count_instances>"
- );
- #else
- BOOST_MPL_ASSERT((
- typename boost::mpl::if_<
- boost::is_convertible<x_type,test::count_instances>
- , boost::mpl::true_
- , boost::mpl::false_
- >::type
- ));
- #endif
- x.noop();
- #if !BOOST_WORKAROUND(BOOST_GCC, < 40000)
- BOOST_TEST_LT(0, test::count_instances::count);
- #endif
- return 0;
- }
- BOOST_PARAMETER_FUNCTION((int), h, tag,
- (required
- (x, (test::count_instances const&))
- )
- )
- {
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- static_assert(
- std::is_convertible<x_type,test::count_instances const>::value
- , "is_convertible<x_type,test::count_instances const>"
- );
- #else
- BOOST_MPL_ASSERT((
- typename boost::mpl::if_<
- boost::is_convertible<x_type,test::count_instances const>
- , boost::mpl::true_
- , boost::mpl::false_
- >::type
- ));
- #endif
- x.noop();
- #if !BOOST_WORKAROUND(BOOST_GCC, < 40000)
- BOOST_TEST_EQ(1, test::count_instances::count);
- #endif
- return 0;
- }
- } // namespace test
- int main()
- {
- test::f(1, 2);
- test::f(1., 2.f);
- test::f(1U);
- test::g(0);
- test::h(0);
- return boost::report_errors();
- }
|