
On Sat, Nov 5, 2011 at 7:17 AM, Lorenzo Caminiti <lorcaminiti@gmail.com> wrote:
Please someone help :)
I looked into Boost.Parameter tests and boost/libs/parameter/test/deduced_dependent_predicate.cpp uses tag::x::_ so I modified the example to the following that compiles: #include <boost/parameter.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/type_traits/is_same.hpp> #include <boost/type_traits/add_pointer.hpp> #include <iostream> BOOST_PARAMETER_NAME(x) BOOST_PARAMETER_NAME(y) BOOST_PARAMETER_FUNCTION( (int), f, tag, (required (x, *) (y, *(boost::is_same<boost::mpl::_1, tag::x::_>)) ) ) { std::cout << x << " " << y << std::endl; return 0; } int main ( void ) { f(1, 2); return 0; } However, this does not solves the original problem with DFS because the following still does not compile: (root_vertex, // Specified type. *(boost::is_same<boost::mpl::_1, typename boost::graph_traits<tag::graph::_>::vertex_descriptor>), //(2) *boost::vertices(graph).first) You get the same error if you try to manipulate the tag::x::_ type from the example above: #include <boost/parameter.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/type_traits/is_same.hpp> #include <boost/type_traits/add_pointer.hpp> #include <iostream> BOOST_PARAMETER_NAME(x) BOOST_PARAMETER_NAME(y) BOOST_PARAMETER_FUNCTION( (int), f, tag, (required (x, *) (y, *(boost::is_same<boost::mpl::_, boost::add_pointer<tag::x::_>::type>)) // (2) ) ) { std::cout << x << " " << y << std::endl; return 0; } int main ( void ) { int* p; f(1, p); return 0; } A far as I can tell, there are two major issues here that should be fixed in Boost.Parameter: 1) The docs don't mention tag::xyz::_ at all, they refer to xyx_type which only works within the function definition and not in the function declaration. 2) The change from x_type to tag::xyz::_ broke the ability to manipulate the parameter type in the function declaration. For example, it broke the ability for Boost.Parameter to program the DFS interface. This seems a major feature that was lost and Boost.Parameter should be fixed to regain such a feature. BTW, why was x_type changed to tag::xyx::_? What's the benefit for that? I hope my assessment below is incorrect and someone will be able to tell me how to program (1) and (2) using tag::xyz::_. Thanks. --Lorenzo