/Src/Dependencies/Boost/libs/parameter/test/basics.cpp
http://hadesmem.googlecode.com/ · C++ · 112 lines · 84 code · 20 blank · 8 comment · 1 complexity · e0db1c6d4ffc7d5281034f4247ac7912 MD5 · raw file
- // Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
- // distribution is subject to 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.hpp>
- #include <cassert>
- #include <string.h>
- #include <boost/bind.hpp>
- #include <boost/ref.hpp>
- #include "basics.hpp"
- namespace test
- {
- // A separate function for getting the "value" key, so we can deduce
- // F and use lazy_binding on it.
- template <class Params, class F>
- typename boost::parameter::lazy_binding<Params,tag::value,F>::type
- extract_value(Params const& p, F const& f)
- {
- typename boost::parameter::lazy_binding<
- Params, tag::value, F
- >::type v = p[value || f ];
- return v;
- }
-
- template<class Params>
- int f_impl(Params const& p)
- {
- typename boost::parameter::binding<Params, tag::name>::type
- n = p[name];
- typename boost::parameter::binding<
- Params, tag::value, double
- >::type v = extract_value(p, boost::bind(&value_default));
-
- typename boost::parameter::binding<
- Params, tag::index, int
- >::type i =
- #if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
- p[test::index | 999];
- #else
- p[index | 999];
- #endif
- p[tester](n,v,i);
- return 1;
- }
- template<class Tester, class Name, class Value, class Index>
- int f(Tester const& t, const Name& name_,
- const Value& value_, const Index& index_)
- {
- return f_impl(f_parameters()(t, name_, value_, index_));
- }
- template<class Tester, class Name, class Value>
- int f(Tester const& t, const Name& name_, const Value& value_)
- {
- return f_impl(f_parameters()(t, name_, value_));
- }
- template<class Tester, class Name>
- int f(Tester const& t, const Name& name_)
- {
- return f_impl(f_parameters()(t, name_));
- }
- template<class Params>
- int f_list(Params const& params)
- {
- return f_impl(params);
- }
- }
- int main()
- {
- using test::f;
- using test::f_list;
- using test::name;
- using test::value;
- using test::index;
- using test::tester;
- f(
- test::values(S("foo"), S("bar"), S("baz"))
- , S("foo"), S("bar"), S("baz")
- );
- int x = 56;
- f(
- test::values("foo", 666.222, 56)
- , index = boost::ref(x), name = "foo"
- );
- #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- // No comma operator available on Borland
- f_list((
- tester = test::values("foo", 666.222, 56)
- , index = boost::ref(x)
- , name = "foo"
- ));
- #endif
-
- //f(index = 56, name = 55); // won't compile
- return boost::report_errors();
- }