diff --git a/test/Jamfile b/test/Jamfile index de8c73e..57a7d74 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -10,6 +10,7 @@ import testing ; : [ run lexicographic_test.cpp ] [ run lex_performance_test.cpp ] [ run named_params_test.cpp ] + [ run named_params_sfinae.cpp ] [ run enable_if_constructors.cpp ] [ run enable_if_member_templates.cpp ] [ run enable_if_dummy_arg_disambiguation.cpp ] diff --git a/test/named_params_sfinae.cpp b/test/named_params_sfinae.cpp new file mode 100755 index 0000000..124c423 --- /dev/null +++ b/test/named_params_sfinae.cpp @@ -0,0 +1,56 @@ +// 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 + +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 + > + > + {}; + + BOOST_NAMED_PARAMS_FUN(void, f, 0, 2, f_keywords) + { + std::string s = p[name | "bar"]; + float v = p[value | 3.f]; + + assert(s == "foo"); + assert(v == 3.f); + } + +} // 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"); +} +