Boost 为什么这个成员函数是重复的?

Boost 为什么这个成员函数是重复的?,boost,boost-multi-index,template-instantiation,Boost,Boost Multi Index,Template Instantiation,我有一些代码可以在VS10上运行,也可以在其他几个平台上运行,但是在VS2015上会导致一个奇怪的错误。错误(在Boost内部的模板扩展中)非常奇怪,因为它指向一个没有const的表单,并告诉我它复制了源代码中紧跟在它前面的前一个成员函数,这是一个添加const的变体 下面是我从这个令人不快的程序中提取出来的一个最小的例子 #define BOOST_MULTI_INDEX_DISABLE_SERIALIZATION #include "boost/multi_index_container.h

我有一些代码可以在VS10上运行,也可以在其他几个平台上运行,但是在VS2015上会导致一个奇怪的错误。错误(在Boost内部的模板扩展中)非常奇怪,因为它指向一个没有
const
的表单,并告诉我它复制了源代码中紧跟在它前面的前一个成员函数,这是一个添加const的变体

下面是我从这个令人不快的程序中提取出来的一个最小的例子

#define BOOST_MULTI_INDEX_DISABLE_SERIALIZATION
#include "boost/multi_index_container.hpp"
#include "boost/multi_index/key_extractors.hpp"
#include "boost/multi_index/ordered_index.hpp"

class C1 { };

class  C2 {
public:
    uint32_t xx1;
    C1 f2() const;
};

namespace bmi = boost::multi_index;

typedef boost::multi_index_container<
    std::shared_ptr< const C2 >,
    bmi::indexed_by<
        bmi::ordered_unique<
            bmi::tag<C1>,
            bmi::composite_key<
                const C2,
                bmi::const_mem_fun< C2, C1, &C2::f2 >,
                bmi::member< C2, const uint32_t, &C2::xx1 >
            > // composite
        > // ordered_unique
    > // indexed_by
> BadContainerBase;

struct BadType : public BadContainerBase { };
\define BOOST\u MULTI\u INDEX\u DISABLE\u序列化
#包括“boost/multi_index_container.hpp”
#包括“boost/multi_index/key_extractors.hpp”
#包括“boost/multi_index/ordered_index.hpp”
类别C1{};
C2类{
公众:
uint32_t xx1;
C1 f2()常数;
};
命名空间bmi=boost::multi_索引;
typedef boost::多索引容器<
std::shared_ptr,
bmi::按索引索引<
bmi::有序_唯一<
标签,
复合密钥<
常数C2,
bmi::const_mem_fun,
bmi::成员
>//复合
>//有序_唯一
>//索引由
>巴德尔基;
结构BadType:公共BadContainerBase{};
我使用的VS2015以x86(32位)为目标

完全错误是:

E:\C++Libs\boost_1_59_0\boost/multi_index/composite_key.hpp(638): error C2535: 'boost::multi_index::composite_key_result<boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>::operator ()(const boost::reference_wrapper<const Class> &) const': member function already defined or declared
        with
        [
            Class=C2
        ]
E:\C++Libs\boost_1_59_0\boost/multi_index/composite_key.hpp(632): note: see declaration of 'boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>::operator ()'
E:\C++Libs\boost_1_59_0\boost/multi_index/detail/ord_index_args.hpp(46): note: see reference to class template instantiation 'boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>' being compiled
E:\C++Libs\boost_1_59_0\boost/mpl/eval_if.hpp(41): note: see reference to class template instantiation 'boost::multi_index::detail::index_args_default_compare<boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>' being compiled
E:\C++Libs\boost_1_59_0\boost/multi_index/detail/ord_index_args.hpp(70): note: see reference to class template instantiation 'boost::mpl::eval_if<boost::mpl::is_na<boost::mpl::na>,boost::multi_index::detail::index_args_default_compare<boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,boost::mpl::identity<boost::mpl::na>>' being compiled
E:\C++Libs\boost_1_59_0\boost/multi_index/ordered_index.hpp(65): note: see reference to class template instantiation 'boost::multi_index::detail::ordered_index_args<Arg1,Arg2,Arg3>' being compiled
        with
        [
            Arg1=boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,
            Arg2=boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,
            Arg3=boost::mpl::na
        ]
E:\C++Libs\boost_1_59_0\boost/multi_index/detail/node_type.hpp(44): note: see reference to class template instantiation 'boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>' being compiled
E:\C++Libs\boost_1_59_0\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(49): note: see reference to class template instantiation 'boost::multi_index::detail::index_node_applier::apply<T1,T2>' being compiled
        with
        [
            T1=boost::mpl::v_iter<boost::mpl::vector1<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>>,0>,
            T2=boost::multi_index::detail::index_node_base<std::shared_ptr<const C2>,std::allocator<std::shared_ptr<const C2>>>
        ]
E:\C++Libs\boost_1_59_0\boost/mpl/aux_/preprocessed/plain/bind.hpp(207): note: see reference to class template instantiation 'boost::mpl::apply_wrap2<boost::multi_index::detail::index_node_applier,boost::mpl::v_iter<boost::mpl::vector1<T0>,0>,boost::multi_index::detail::index_node_base<Value,Allocator>>' being compiled
        with
        [
            T0=boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>,
            Value=std::shared_ptr<const C2>,
            Allocator=std::allocator<std::shared_ptr<const C2>>
        ]
E:\C++Libs\boost_1_59_0\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(49): note: see reference to class template instantiation 'boost::mpl::bind2<boost::multi_index::detail::index_node_applier,boost::mpl::_2,boost::mpl::_  ::apply<T1,T2,boost::mpl::na,boost::mpl::na,boost::mpl::na>' being compiled
        with
        [
            T1=boost::multi_index::detail::index_node_base<std::shared_ptr<const C2>,std::allocator<std::shared_ptr<const C2>>>,
            T2=boost::mpl::v_iter<boost::mpl::vector1<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>>,0>
        ]
E:\C++Libs\boost_1_59_0\boost/mpl/aux_/preprocessed/plain/apply.hpp(63): note: see reference to class template instantiation 'boost::mpl::apply_wrap2<boost::mpl::bind2<boost::multi_index::detail::index_node_applier,boost::mpl::_2,boost::mpl::_  ,T1,T2>' being compiled
        with
        [
            T1=boost::multi_index::detail::index_node_base<std::shared_ptr<const C2>,std::allocator<std::shared_ptr<const C2>>>,
            T2=boost::mpl::v_iter<boost::mpl::vector1<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>>,0>
        ]
E:\C++Libs\boost_1_59_0\boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp(58): note: see reference to class template instantiation 'boost::mpl::apply2<BackwardOp,boost::multi_index::detail::index_node_base<Value,Allocator>,boost::mpl::v_iter<boost::mpl::vector1<T0>,0>>' being compiled
        with
        [
            BackwardOp=boost::mpl::bind2<boost::multi_index::detail::index_node_applier,boost::mpl::_2,boost::mpl::_  ,
            Value=std::shared_ptr<const C2>,
            Allocator=std::allocator<std::shared_ptr<const C2>>,
            T0=boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>
        ]
E:\C++Libs\boost_1_59_0\boost/mpl/reverse_iter_fold.hpp(43): note: see reference to class template instantiation 'boost::mpl::aux::reverse_iter_fold_impl<1,boost::mpl::v_iter<boost::mpl::vector1<T0>,0>,boost::mpl::v_iter<boost::mpl::vector1<T0>,  ,State,boost::mpl::bind2<boost::multi_index::detail::index_node_applier,boost::mpl::_2,boost::mpl::_  ,boost::mpl::protect<boost::mpl::arg<  ,0>>' being compiled
        with
        [
            T0=boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>,
            State=boost::multi_index::detail::index_node_base<std::shared_ptr<const C2>,std::allocator<std::shared_ptr<const C2>>>
        ]
E:\C++Libs\boost_1_59_0\boost/multi_index/detail/node_type.hpp(57): note: see reference to class template instantiation 'boost::mpl::reverse_iter_fold<IndexSpecifierList,boost::multi_index::detail::index_node_base<Value,Allocator>,boost::mpl::bind2<boost::multi_index::detail::index_node_applier,boost::mpl::_2,boost::mpl::_  ,boost::mpl::arg<  >' being compiled
        with
        [
            IndexSpecifierList=boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,
            Value=std::shared_ptr<const C2>,
            Allocator=std::allocator<std::shared_ptr<const C2>>
        ]
E:\C++Libs\boost_1_59_0\boost/multi_index_container.hpp(89): note: see reference to class template instantiation 'boost::multi_index::detail::multi_index_node_type<Value,IndexSpecifierList,Allocator>' being compiled
        with
        [
            Value=std::shared_ptr<const C2>,
            IndexSpecifierList=boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,
            Allocator=std::allocator<std::shared_ptr<const C2>>
        ]
Annotation\Model.cpp(40): note: see reference to class template instantiation 'boost::multi_index::multi_index_container<std::shared_ptr<const C2>,boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<C1,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::composite_key<const C2,boost::multi_index::const_mem_fun<C2,C1,C1 C2::f2(void) const>,boost::multi_index::member<C2,const uint32_t,pointer-to-member(0x0)>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>,boost::mpl::na>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>>' being compiled
        with
        [
            Value=std::shared_ptr<const C2>
        ]
E:\C++Libs\boost_1_59_0\boost/multi_index/composite_key.hpp(638):错误C2535:'boost::multi_index::composite_key_结果boost::multi_index::composite_key::operator()(const boost::reference_wrapper&)const':成员函数已定义或声明
具有
[
类别=C2
]
E:\C++Libs\boost\u 1\u 59\u 0\boost/multi\u index/composite\u key.hpp(632):注意:请参见“boost::multi\u index::composite\u key::operator()”的声明
E:\C++Libs\boost\u 1\u 59\u 0\boost/multi\u index/detail/ord\u index\u args.hpp(46):注意:请参阅正在编译的类模板实例化“boost::multi\u index::composite\u key”的参考
E:\C++Libs\boost\u 1\u 59\u 0\boost/mpl/eval\u if.hpp(41):注意:请参阅正在编译的类模板实例化“boost::multi\u index::detail::index\u args\u default\u compare”
E:\C++Libs\boost\u 1\u 59\u 0\boost/multi\u index/detail/ord\u index\u args.hpp(70):注意:请参阅正在编译的类模板实例化“boost::mpl::eval\u if”的参考
E:\C++Libs\boost\u 1\u 59\u 0\boost/multi\u index/ordered\u index.hpp(65):注意:请参阅正在编译的类模板实例化“boost::multi\u index::detail::ordered\u index\u args”
具有
[
Arg1=boost::multi_index::tag,
Arg2=boost::多索引::复合索引键,
Arg3=boost::mpl::na
]
E:\C++Libs\boost\u 1\u 59\u 0\boost/multi\u index/detail/node\u type.hpp(44):注意:请参阅正在编译的类模板实例化“boost::multi\u index::ordered\u unique”
E:\C++Libs\boost\u 1\u 59\u 0\boost/mpl/aux\u/preprocessed/plain/apply\u wrap.hpp(49):注意:请参阅正在编译的类模板实例化“boost::multi\u index::detail::index\u node\u applier::apply”的参考
具有
[
T1=boost::mpl::v_iter,
T2=boost::多索引::细节::索引节点\u基
]
E:\C++Libs\boost\u 1\u 59\u 0\boost/mpl/aux\u/preprocessed/plain/bind.hpp(207):注意:请参阅正在编译的类模板实例化“boost::mpl::apply\u wrap2”
具有
[
T0=boost::多索引::有序唯一,
值=标准::共享\u ptr,
分配器=std::分配器
]

E:\C++Libs\boost\u 1\u 59\u 0\boost/mpl/aux\u/preprocessed/plain/apply\u wrap.hpp(49):注意:请参阅类模板实例化“boost::mpl::bind2您的
组合键指定错误,应该

bmi::composite_key<
    C2,
    bmi::const_mem_fun< C2, C1, &C2::f2 >,
    bmi::member< C2, const uint32_t, &C2::xx1 >
>
bmi::复合密钥<
C2,
bmi::const_mem_fun,
bmi::成员
>

i、 e.在第一个参数中没有
const
限定符。另外,您可能还想看看Boost.MultiIndex文档,特别是倒数第二段。

很有趣。使用
const C2
作为
value\u type
的替换肯定会使这些声明匹配。但是错误信息告诉我,它只是简单的
C2
,我认为在达到这一点之前,它已经被剥离到mpl内容的内部。对于您指出的文档中的段落,
member
是我所拥有的。我将您重定向到文档中的该部分,对问题没有什么帮助,对不起。相反,请看一看,在这里您可以看到
const-reference\u-wrapper&
const-reference\u-wrapper&
上分别有两个
操作符()
的重载,这意味着如果
value\u-type
const
,那么
复合键
的定义就不正确了。我很快就会研究这个问题,@Joaquin,谢谢。我想我不明白为什么编译器没有显示替换类型的
constc2
,我同意这会导致问题。但我还没有解开这些扩展,看看它是否真的被C2 bare调用,编译器只是把它放在某个地方(尽管它在其他地方显示const没有问题)。
bmi::composite_key<
    C2,
    bmi::const_mem_fun< C2, C1, &C2::f2 >,
    bmi::member< C2, const uint32_t, &C2::xx1 >
>