
Hello, in these code I try to unpack the 1stand 2nd element, but it doesn't compile (here, it complains about »apply« in »struct boost::mpl::at_impl<boost::mpl::non_sequence_tag>« Is there a better way and how to get it to compile? Thanks, Olaf ---8<--- #include <boost/mpl/vector.hpp> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/max_element.hpp> #include <boost/mpl/pair.hpp> #include <boost/mpl/integral_c.hpp> #include <boost/mpl/size_t.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/mpl/at.hpp> #include <iostream> namespace mpl = boost::mpl; struct code { enum type { undefined, foo, bar }; }; typedef mpl::vector<std::size_t, // min max mpl::pair< mpl::size_t<0>, mpl::size_t<0> >, // undefined mpl::pair< mpl::size_t<1>, mpl::size_t<3> >, // foo mpl::pair< mpl::size_t<2>, mpl::size_t<5> > // bar
arity_info;
template <code::type code> struct min_arity : mpl::at_c< typename mpl::at_c<arity_info, code>::type, 0 >::type { }; // same for max_arity at index 1 (pair::second) int main() { std::cout << "min arity = " << min_arity<code::bar>::value << '\n'; // std::cout << "max arity = " // << max_arity<code::bar>::value << '\n'; } --->8---