// 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 #include #include #include #include namespace test { using boost::keyword; using boost::keywords; using boost::named_param; struct name_t; keyword name; struct value_t; keyword value; struct f_keywords : keywords< named_param< name_t , boost::mpl::true_ , boost::is_convertible > , named_param< value_t , boost::mpl::true_ , boost::is_convertible > > {}; template void f_impl(P const& p) { std::string s = p[name | "bar"]; float v = p[value | 3.f]; assert(s == "foo"); assert(v == 3.f); } void f() { f_impl(f_keywords()()); } template void f(A0 const& a0 , typename f_keywords::restrict::type = f_keywords()) { f_impl(f_keywords()(a0)); } template void f(A0 const& a0, A1 const& a1 , typename f_keywords::restrict::type = f_keywords()) { f_impl(f_keywords()(a0, a1)); } } // namespace test int main() { using test::name; using test::value; using test::f; f("foo"); f("foo", 3.f); f(value = 3.f, name = "foo"); return 0; }