/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Library/boost/libs/parameter/test/earwicker.cpp
124 строки
3 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
// Copyright David Abrahams, Daniel Wallin 2005. // 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 #if !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \ (BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY < 5) #error Define BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY \ as 5 or greater. #endif #include <boost/parameter/name.hpp> namespace test { BOOST_PARAMETER_NAME(w) BOOST_PARAMETER_NAME(x) BOOST_PARAMETER_NAME(y) BOOST_PARAMETER_NAME(z) } // namespace test #if !defined(BOOST_PARAMETER_CAN_USE_MP11) #include <boost/mpl/bool.hpp> #include <boost/mpl/if.hpp> #include <boost/type_traits/is_convertible.hpp> namespace test { struct f_predicate { template <typename T, typename Args> struct apply : boost::mpl::if_< boost::is_convertible<T,int> , boost::mpl::true_ , boost::mpl::false_ > { }; }; } // namespace test #endif // BOOST_PARAMETER_CAN_USE_MP11 #include <boost/parameter/parameters.hpp> #if defined(BOOST_PARAMETER_CAN_USE_MP11) #include <boost/mp11/bind.hpp> #include <type_traits> #endif namespace test { struct f_parameters // vc6 is happier with inheritance than with a typedef : boost::parameter::parameters< boost::parameter::required<test::tag::w> #if defined(BOOST_PARAMETER_CAN_USE_MP11) , boost::parameter::optional< test::tag::x , boost::mp11::mp_bind<std::is_convertible,boost::mp11::_1,int> > , boost::parameter::optional< test::tag::y , boost::mp11::mp_bind<std::is_convertible,boost::mp11::_1,int> > , boost::parameter::optional< test::tag::z , boost::mp11::mp_bind<std::is_convertible,boost::mp11::_1,int> > #else , boost::parameter::optional<test::tag::x,test::f_predicate> , boost::parameter::optional<test::tag::y,test::f_predicate> , boost::parameter::optional<test::tag::z,test::f_predicate> #endif // BOOST_PARAMETER_CAN_USE_MP11 > { }; } // namespace test #include <boost/parameter/macros.hpp> #include <boost/core/lightweight_test.hpp> namespace test { #if defined(BOOST_NO_VOID_RETURNS) BOOST_PARAMETER_FUN(int, f, 1, 4, f_parameters) #else BOOST_PARAMETER_FUN(void, f, 1, 4, f_parameters) #endif { BOOST_TEST_EQ(p[test::_w][0], p[test::_x | -1]); BOOST_TEST_EQ(p[test::_w][1], p[test::_y | -2]); BOOST_TEST_EQ(p[test::_w][2], p[test::_z | -3]); #if defined(BOOST_NO_VOID_RETURNS) return 0; #endif } } // namespace test int main() { int a[3]; a[0] = 1; a[1] = 2; a[2] = 3; test::f(test::_x = 1, test::_y = 2, test::_z = 3, test::_w = a); a[1] = -2; a[2] = -3; test::f(test::_x = 1, test::_w = a); a[0] = -1; a[1] = 2; test::f(test::_y = 2, test::_w = a); a[1] = -2; a[2] = 3; test::f(test::_z = 3, test::_w = a); a[0] = 1; test::f(test::_z = 3, test::_x = 1, test::_w = a); return boost::report_errors(); }