Skip to content

Can't build on macOS Sierra: likely a boost c++11 error? #12009

@fernandezpablo85

Description

@fernandezpablo85

Expected: make to compile and build OK

What happens: Make fails to build the miner:

Making all in src
  CXX      libbitcoin_server_a-miner.o
In file included from miner.cpp:6:
In file included from ./miner.h:10:
In file included from ./txmempool.h:25:
In file included from /usr/local/include/boost/multi_index/ordered_index.hpp:17:
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:1181:10: error: no matching function for call to object of type
      'const key_compare' (aka 'const CompareModifiedEntry')
      if(comp_(key(v),key(y->value())))return false;
         ^~~~~
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:825:9: note: in instantiation of member function
      'boost::multi_index::detail::ordered_index_impl<boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry,
      boost::multi_index::detail::nth_layer<2, CTxMemPoolModifiedEntry,
      boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter, mpl_::na>,
      boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >, boost::mpl::v_item<ancestor_score, boost::mpl::vector0<mpl_::na>, 0>,
      boost::multi_index::detail::ordered_non_unique_tag, boost::multi_index::detail::null_augment_policy>::in_place' requested here
      b=in_place(x->value(),x,Category());
        ^
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:860:18: note: in instantiation of member function
      'boost::multi_index::detail::ordered_index_impl<boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry,
      boost::multi_index::detail::nth_layer<2, CTxMemPoolModifiedEntry,
      boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter, mpl_::na>,
      boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >, boost::mpl::v_item<ancestor_score, boost::mpl::vector0<mpl_::na>, 0>,
      boost::multi_index::detail::ordered_non_unique_tag, boost::multi_index::detail::null_augment_policy>::modify_' requested here
      if(!super::modify_(x)){
                 ^
/usr/local/include/boost/multi_index_container.hpp:823:18: note: in instantiation of member function
      'boost::multi_index::detail::ordered_index_impl<modifiedentry_iter, CompareCTxMemPoolIter, boost::multi_index::detail::nth_layer<1,
      CTxMemPoolModifiedEntry, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter,
      mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >, boost::mpl::vector0<mpl_::na>,
      boost::multi_index::detail::ordered_unique_tag, boost::multi_index::detail::null_augment_policy>::modify_' requested here
      if(!super::modify_(x)){
                 ^
/usr/local/include/boost/multi_index/detail/index_base.hpp:278:21: note: in instantiation of function template specialization
      'boost::multi_index::multi_index_container<CTxMemPoolModifiedEntry,
      boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter, mpl_::na>,
      boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >::modify_<update_for_parent_inclusion>' requested here
    {return final().modify_(mod,x);}
                    ^
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:418:18: note: in instantiation of function template specialization
      'boost::multi_index::detail::index_base<CTxMemPoolModifiedEntry,
      boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter, mpl_::na>,
      boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >::final_modify_<update_for_parent_inclusion>' requested here
    return this->final_modify_(
                 ^
miner.cpp:269:31: note: in instantiation of function template specialization
      'boost::multi_index::detail::ordered_index_impl<modifiedentry_iter, CompareCTxMemPoolIter, boost::multi_index::detail::nth_layer<1,
      CTxMemPoolModifiedEntry, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter,
      mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na>, boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
      mpl_::na, mpl_::na>, std::__1::allocator<CTxMemPoolModifiedEntry> >, boost::mpl::vector0<mpl_::na>,
      boost::multi_index::detail::ordered_unique_tag, boost::multi_index::detail::null_augment_policy>::modify<update_for_parent_inclusion>'
      requested here
                mapModifiedTx.modify(mit, update_for_parent_inclusion(it));
                              ^
./miner.h:74:10: note: candidate function not viable: 'this' argument has type 'const key_compare' (aka 'const CompareModifiedEntry'), but
      method is not marked const
    bool operator()(const CTxMemPoolModifiedEntry &a, const CTxMemPoolModifiedEntry &b)
         ^
In file included from miner.cpp:6:
In file included from ./miner.h:10:
In file included from ./txmempool.h:25:
In file included from /usr/local/include/boost/multi_index/ordered_index.hpp:17:
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:1186:26: error: no matching function for call to object of type
      'const key_compare' (aka 'const CompareModifiedEntry')
    return y==header()||!comp_(key(y->value()),key(v));
                         ^~~~~
./miner.h:74:10: note: candidate function not viable: 'this' argument has type 'const key_compare' (aka 'const CompareModifiedEntry'), but
      method is not marked const
    bool operator()(const CTxMemPoolModifiedEntry &a, const CTxMemPoolModifiedEntry &b)
         ^
2 errors generated.
make[2]: *** [libbitcoin_server_a-miner.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1

How to reproduce: Follow the OSX install instructions readme

Version of core: v0.15.1 (7b57bc9)

Type of machine: MacbookAir 2015

Extra information: Seems like an issue with boost:

/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:1186:26: error: no matching function for call to object of type
      'const key_compare' (aka 'const CompareModifiedEntry')
    return y==header()||!comp_(key(y->value()),key(v));

Note that running brew install boost --c++11 as indicated in the OSX install readme throws the following warning:

Warning: boost: this formula has no --c++11 option so it will be ignored!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions