Hi,
I have a problem with a hash-index to a member of type
std::vectorstd::strings. With boost 1.34 it compiles
and runs find, but it fails to compile with 1.33!
Unfortunately I do not have the luxury to change
boost-version. Is there any way around this?
I defined my multi_index_container like this:
typedef std::vectorstd::string keys_type;
struct entry_type
{
keys_type keys;
bool operator<(const entry_type& e) const
{ ... }
};
typedef boost::multi_index::multi_index_container<
entry_type,
mi::indexed_by<
mi::hashed_unique<
mi::tag,
mi::member >,
mi::ordered_non_unique<
mi::tag,
mi::identity >
mi_entries_type;
And get the following compile-error (see the bottom):
/usr/bin/g++ -m64 -pipe -Wall -fPIC -O3 -DNDEBUG
-I../framework
-I/sitestat/src/nightly/2007-06-14/branches/rel-6-00/src/build/../../src/cgi
-I/sitestat/src/nightly/2007-06-14/branches/rel-6-00/src/build/../../src/zip_utils
-DBOOST_SP_USE_QUICK_ALLOCATOR -DBOOST_DISABLE_THREADS
-m64 -pipe -Wall -fPIC -O3 -DNDEBUG -c refper_key.cpp
-o release/refper_key.o
refper_key.cpp: In member function virtual
repgen::operator_base::error_code
repgen::refper_key::do_pre_eval():
refper_key.cpp:391: warning: unused variable cols
/usr/include/boost/functional/hash/hash.hpp: In static
member function static size_t
boost::hash_detail::call_hash<T>::call(const T&) [with
T = std::vector,
std::allocator > >]:
/usr/include/boost/functional/hash/hash.hpp:315:
instantiated from size_t
boost::hash<T>::operator()(const T&) const [with T =
std::vector,
std::allocator > >]
/usr/include/boost/multi_index/hashed_index.hpp:372:
instantiated from
boost::multi_index::detail::hashed_index_iterator
boost::multi_index::detail::hashed_index::find(const
CompatibleKey&, const CompatibleHash&, const
CompatiblePred&) const [with CompatibleKey =
std::vector,
std::allocator > >,
CompatibleHash =
boost::hash,
std::allocator > > >,
CompatiblePred =
std::equal_to,
std::allocator > > >,
KeyFromValue =
boost::multi_index::member,
std::allocator > >,
&repgen::refper_types::entry_type::keys>, Hash =
boost::hash,
std::allocator > > >,
Pred =
std::equal_to,
std::allocator > > >,
SuperMeta = boost::multi_index::detail::nth_layer<1,
repgen::refper_types::entry_type,
boost::multi_index::indexed_by,
boost::multi_index::member,
std::allocator > >,
&repgen::refper_types::entry_type::keys>, mpl_::na,
mpl_::na>,
boost::multi_index::ordered_non_unique,
boost::multi_index::identityrepgen::refper_types::entry_type,
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>,
std::allocatorrepgen::refper_types::entry_type >,
TagList =
boost::mpl::v_item, 0>, Category =
boost::multi_index::detail::hashed_unique_tag]
/usr/include/boost/multi_index/hashed_index.hpp:362:
instantiated from
boost::multi_index::detail::hashed_index_iterator
boost::multi_index::detail::hashed_index::find(const
CompatibleKey&) const [with CompatibleKey =
repgen::refper_types::keys_type, KeyFromValue =
boost::multi_index::member,
std::allocator > >,
&repgen::refper_types::entry_type::keys>, Hash =
boost::hash,
std::allocator > > >,
Pred =
std::equal_to,
std::allocator > > >,
SuperMeta = boost::multi_index::detail::nth_layer<1,
repgen::refper_types::entry_type,
boost::multi_index::indexed_by,
boost::multi_index::member,
std::allocator > >,
&repgen::refper_types::entry_type::keys>, mpl_::na,
mpl_::na>,
boost::multi_index::ordered_non_unique,
boost::multi_index::identityrepgen::refper_types::entry_type,
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>,
std::allocatorrepgen::refper_types::entry_type >,
TagList =
boost::mpl::v_item, 0>, Category =
boost::multi_index::detail::hashed_unique_tag]
refper_key.cpp:272: instantiated from here
/usr/include/boost/functional/hash/hash.hpp:132:
error: no matching function for call to
hash_value(const std::vector,
std::allocator > >&)
/usr/include/boost/functional/hash/hash.hpp:89: note:
candidates are: size_t boost::hash_value(int)
/usr/include/boost/functional/hash/hash.hpp:94: note:
size_t boost::hash_value(unsigned int)
/usr/include/boost/functional/hash/hash.hpp:99: note:
size_t boost::hash_value(long int)
/usr/include/boost/functional/hash/hash.hpp:104: note:
size_t boost::hash_value(long unsigned
int)
/usr/include/boost/functional/hash/hash.hpp:293: note:
size_t boost::hash_value(float)
/usr/include/boost/functional/hash/hash.hpp:298: note:
size_t boost::hash_value(double)
/usr/include/boost/functional/hash/hash.hpp:303: note:
size_t boost::hash_value(long double)
Thanks!
Andrej
___________________________________________________________
Yahoo! Mail is the world's favourite email. Don't settle for less, sign up for
your free account today http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.htm...