1
所以我想獲得一個唯一的類型列表,我想擺脫所有常量重複,我通過列表可能會包含。我認爲下面的代碼應該可以工作,但my_set包含兩次「int」。我究竟做錯了什麼?boost :: mpl :: set認爲remove_cv <const T> :: type!= T
#include <boost/mpl/vector.hpp>
#include <boost/mpl/transform.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/set.hpp>
#include <boost/mpl/insert.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/assert.hpp>
typedef boost::mpl::vector<float,int,float,const int>::type my_v;
typedef boost::mpl::transform
< my_v
, boost::remove_cv<boost::mpl::_1>::type
>::type my_v2;
typedef boost::mpl::fold
< my_v2
, boost::mpl::set0<>
, boost::mpl::insert
< boost::mpl::_1
, boost::mpl::_2
>
>::type my_set;
BOOST_MPL_ASSERT_RELATION(boost::mpl::size<my_set>::value, ==, 2); // Fails
如果從'升壓刪除':: type' :: remove_cv'它似乎工作。希望有人能夠告訴你爲什麼。 – llonesmiz