blob: d80f2f9f084eb99f75ecb85de4a1f1bc66aeb052 [file] [log] [blame]
#include <boost/parameter.hpp>
#include <iostream>
BOOST_PARAMETER_NAME(index)
template <typename ArgumentPack>
int print_index(ArgumentPack const& args)
{
std::cout << "index = " << args[_index] << std::endl;
return 0;
}
BOOST_PARAMETER_NAME(name)
template <typename ArgumentPack>
int print_name_and_index(ArgumentPack const& args)
{
std::cout << "name = " << args[_name] << "; ";
return print_index(args);
}
#include <boost/core/lightweight_test.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_convertible.hpp>
int main()
{
int x = print_index(_index = 3); // prints "index = 3"
int y = print_name_and_index((_index = 3, _name = "jones"));
boost::parameter::parameters<
boost::parameter::required<
tag::name
, boost::mpl::if_<
boost::is_convertible<boost::mpl::_,char const*>
, boost::mpl::true_
, boost::mpl::false_
>
>
, boost::parameter::optional<
tag::index
, boost::mpl::if_<
boost::is_convertible<boost::mpl::_,int>
, boost::mpl::true_
, boost::mpl::false_
>
>
> spec;
char const sam[] = "sam";
int twelve = 12;
int z0 = print_name_and_index(spec(sam, twelve));
int z1 = print_name_and_index(spec(_index=12, _name="sam"));
BOOST_TEST(!x);
BOOST_TEST(!y);
BOOST_TEST(!z0);
BOOST_TEST(!z1);
return boost::report_errors();
}