Boost logo

Boost Users :

Subject: Re: [Boost-users] [MPL] mpl::at for AssociativeSequence
From: Jeffrey Lee Hellrung, Jr. (jeffrey.hellrung_at_[hidden])
Date: 2012-06-12 13:39:18


On Tue, Jun 12, 2012 at 9:11 AM, <dariomt_at_[hidden]> wrote:

> Hi list,
>
> I'm trying to use the version of mpl::at with three template parameters,
> as specified here (
> http://www.boost.org/doc/libs/1_46_0/libs/mpl/doc/refmanual/at.html)
>
> But I'm getting a compiler error saying 'boost::mpl::at' : too many
> template arguments.
>
> What am I doing wrong?
>
>
> #include <boost/mpl/map.hpp>
> #include <boost/mpl/at.hpp>
> #include <boost/mpl/size.hpp>
> #include <boost/mpl/empty.hpp>
> #include <boost/type_traits/is_same.hpp>
>
> using namespace boost;
> using namespace boost::mpl;
>
> typedef map<
> pair<int,unsigned>
> , pair<char,unsigned char>
> , pair<long_<5>,char[17]>
> , pair<int[42],bool>
> > m;
>
> BOOST_MPL_ASSERT_RELATION( size<m>::value, ==, 4 );
> BOOST_MPL_ASSERT_NOT(( empty<m> ));
>
> BOOST_MPL_ASSERT(( is_same< at<m,int>::type, unsigned > ));
> BOOST_MPL_ASSERT(( is_same< at<m,long_<5> >::type, char[17] > ));
> BOOST_MPL_ASSERT(( is_same< at<m,int[42]>::type, bool > ));
> BOOST_MPL_ASSERT(( is_same< at<m,long>::type, void_ > ));
>
> BOOST_MPL_ASSERT(( is_same< at<m,long,void_>::type, void_ > )); // fails!
>

It seems there is a discrepancy between the documentation and the code; if
you take a look at boost/mpl/at_fwd.hpp, it forward declares boost::mpl::at
with only 2 template parameters :(

Please file a trac ticket, and I'll try to find out what the correct
resolution is on the developer's list.

- Jeff



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net