Boost logo

Boost Users :

From: bert hubert (bert.hubert_at_[hidden])
Date: 2006-03-11 12:39:05


Hi,

Let me start off by saying that I consider multi_index to be the most
stunningly clever AND useful piece of c++ around. Thanks!

A PowerDNS user on RHEL 3 with a gcc that calls itself 'gcc 3.2.3' reports
the following error compiling PowerDNS snapshot 576
(http://svn.powerdns.com/snapshots/576/pdns-2.9.20.20060311.576.tar.gz):
Message:
http://mailman.powerdns.com/pipermail/pdns-users/2006-March/003134.html

mtasker.cc: In member function `bool MTasker<EventKey, EventVal>::schedule()
    [with EventKey = PacketID, EventVal = std::string]':
pdns_recursor.cc:723: instantiated from here
mtasker.cc:286: no matching function for call to `boost::multi_index::multi_index_container<MTasker<PacketID,
    std::string>::Waiter,
    boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::member<MTasker<PacketID,
    std::string>::Waiter, PacketID, &MTasker<PacketID,
    std::string>::Waiter::key>, mpl_::na, mpl_::na>,
    boost::multi_index::ordered_non_unique<boost::multi_index::tag<MTasker<PacketID,
    std::string>::KeyTag, 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::member<MTasker<PacketID, std::string>::Waiter, time_t,
    &MTasker<PacketID, std::string>::Waiter::ttd>, 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::allocator<MTasker<PacketID,
    std::string>::Waiter> >::get()'
make[3]: *** [pdns_recursor.o] Error 1
make[3]: Leaving directory /temp/pdns-2.9.20.20060311.576/pdns'

To reproduce, download the tar file, run ./configure --with-modules="" ; cd
pdns ; make pdns_recursor, besides boost there are no dependencies when
compiled like this.

Relevant details from mtasker.hh
http://wiki.powerdns.com/projects/trac/browser/trunk/pdns/pdns/mtasker.cc?rev=576

60 struct KeyTag {};
61 typedef multi_index_container<
62 Waiter,
63 indexed_by <
64 ordered_unique<member<Waiter,EventKey,&Waiter::key> >,
65 ordered_non_unique<tag<KeyTag>, member<Waiter,time_t,&Waiter::ttd> >
66 >
67 > waiters_t;
68
69 waiters_t d_waiters;

>From mtasker.cc:
http://wiki.powerdns.com/projects/trac/browser/trunk/pdns/pdns/mtasker.hh?rev=576

285 typedef typename waiters_t::template index<KeyTag>::type waiters_by_ttd_index_t;
286 waiters_by_ttd_index_t& ttdindex=d_waiters.get<KeyTag>();

Any ideas, especially on a workaround? It compiles fine on all gcc's I have
access to.

Thanks!

-- 
http://www.PowerDNS.com      Open source, database driven DNS Software 
http://netherlabs.nl              Open and Closed source services

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