build fails with boost-1.77.0
/bin/sh ../../../libtool --tag=CXX --mode=compile x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../src/lib -I../../../src/lib -DDHCP_DATA_DIR="\"/var/lib/kea\"" -DTOP_BUILDDIR="\"../../..\"" -DKEA_LFC_EXECUTABLE="\"/
usr/sbin/kea-lfc\"" -DOS_LINUX -I../../.. -I../../.. -Wall -Wextra -Wnon-virtual-dtor -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -pthread -Wno-missing-field-initializers -fPIC -march=native -mtune=native -O2 -pipe -c -o libkea_dhcpsrv_la-timer_mgr.lo `test -f 'timer_mgr.cc' || echo './'`timer_mgr.cc
libtool: compile: x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../src/lib -I../../../src/lib -DDHCP_DATA_DIR=\"/var/lib/kea\" -DTOP_BUILDDIR=\"../../..\" -DKEA_LFC_EXECUTABLE=\"/usr/sbin/kea-lfc\" -DOS_LINUX -I../../.. -I../../.. -Wall -Wextra -Wnon-virtual-dtor -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -pthread -Wno-missing-field-initializers -fPIC -march=native -mtune=native -O2 -pipe -c timer_mgr.cc -fPIC -DPIC -o .libs/libkea_dhcpsrv_la-timer_mgr.o
timer_mgr.cc:72:14: error: ‘map’ in namespace ‘std’ does not name a template type
72 | typedef std::map<std::string, TimerInfoPtr> TimerInfoMap;
| ^~~
timer_mgr.cc:16:1: note: ‘std::map’ is defined in header ‘<map>’; did you forget to ‘#include <map>’?
15 | #include <boost/scoped_ptr.hpp>
+++ |+#include <map>
16 |
timer_mgr.cc:220:5: error: ‘TimerInfoMap’ does not name a type; did you mean ‘TimerInfoPtr’?
220 | TimerInfoMap registered_timers_;
| ^~~~~~~~~~~~
| TimerInfoPtr
timer_mgr.cc: In constructor ‘isc::dhcp::TimerMgrImpl::TimerMgrImpl()’:
timer_mgr.cc:227:5: error: class ‘isc::dhcp::TimerMgrImpl’ does not have any field named ‘registered_timers_’
227 | registered_timers_(), mutex_(new std::mutex) {
| ^~~~~~~~~~~~~~~~~~
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::registerTimerInternal(const string&, const Callback&, long int, const isc::asiolink::IntervalTimer::Mode&)’:
timer_mgr.cc:263:9: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
263 | if (registered_timers_.find(timer_name) != registered_timers_.end()) {
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:275:5: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
275 | registered_timers_.insert(std::pair<std::string, TimerInfoPtr>(timer_name,
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::unregisterTimerInternal(const string&)’:
timer_mgr.cc:292:5: error: ‘TimerInfoMap’ has not been declared
292 | TimerInfoMap::iterator timer_info_it = registered_timers_.find(timer_name);
| ^~~~~~~~~~~~
timer_mgr.cc:295:9: error: ‘timer_info_it’ was not declared in this scope
295 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~
timer_mgr.cc:295:26: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
295 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:304:5: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
304 | registered_timers_.erase(timer_info_it);
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:304:30: error: ‘timer_info_it’ was not declared in this scope
304 | registered_timers_.erase(timer_info_it);
| ^~~~~~~~~~~~~
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::unregisterTimersInternal()’:
timer_mgr.cc:328:5: error: ‘TimerInfoMap’ was not declared in this scope; did you mean ‘TimerInfoPtr’?
328 | TimerInfoMap registered_timers_copy(registered_timers_);
| ^~~~~~~~~~~~
| TimerInfoPtr
timer_mgr.cc:331:10: error: ‘TimerInfoMap’ is not a class, namespace, or enumeration
331 | for (TimerInfoMap::iterator timer_info_it = registered_timers_copy.begin();
| ^~~~~~~~~~~~
timer_mgr.cc:332:10: error: ‘timer_info_it’ was not declared in this scope
332 | timer_info_it != registered_timers_copy.end(); ++timer_info_it) {
| ^~~~~~~~~~~~~
timer_mgr.cc:332:27: error: ‘registered_timers_copy’ was not declared in this scope
332 | timer_info_it != registered_timers_copy.end(); ++timer_info_it) {
| ^~~~~~~~~~~~~~~~~~~~~~
timer_mgr.cc: In member function ‘bool isc::dhcp::TimerMgrImpl::isTimerRegistered(const string&)’:
timer_mgr.cc:341:17: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
341 | return (registered_timers_.find(timer_name) != registered_timers_.end());
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:343:17: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
343 | return (registered_timers_.find(timer_name) != registered_timers_.end());
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc: In member function ‘size_t isc::dhcp::TimerMgrImpl::timersCount() const’:
timer_mgr.cc:351:17: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
351 | return (registered_timers_.size());
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:353:17: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
353 | return (registered_timers_.size());
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::setupInternal(const string&)’:
timer_mgr.cc:370:4: error: ‘TimerInfoMap’ has not been declared
370 | TimerInfoMap::const_iterator timer_info_it = registered_timers_.find(timer_name);
| ^~~~~~~~~~~~
timer_mgr.cc:371:8: error: ‘timer_info_it’ was not declared in this scope
371 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~
timer_mgr.cc:371:25: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
371 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:378:37: error: ‘timer_info_it’ was not declared in this scope; did you mean ‘timer_info’?
378 | const TimerInfoPtr& timer_info = timer_info_it->second;
| ^~~~~~~~~~~~~
| timer_info
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::cancelInternal(const string&)’:
timer_mgr.cc:398:5: error: ‘TimerInfoMap’ has not been declared
398 | TimerInfoMap::const_iterator timer_info_it = registered_timers_.find(timer_name);
| ^~~~~~~~~~~~
timer_mgr.cc:399:9: error: ‘timer_info_it’ was not declared in this scope
399 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~
timer_mgr.cc:399:26: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
399 | if (timer_info_it == registered_timers_.end()) {
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:404:5: error: ‘timer_info_it’ was not declared in this scope
404 | timer_info_it->second->interval_timer_.cancel();
| ^~~~~~~~~~~~~
timer_mgr.cc: In member function ‘void isc::dhcp::TimerMgrImpl::timerCallback(const string&)’:
timer_mgr.cc:410:5: error: ‘TimerInfoMap’ has not been declared
410 | TimerInfoMap::iterator timer_info_it = registered_timers_.find(timer_name);
| ^~~~~~~~~~~~
timer_mgr.cc:411:9: error: ‘timer_info_it’ was not declared in this scope
411 | if (timer_info_it != registered_timers_.end()) {
| ^~~~~~~~~~~~~
timer_mgr.cc:411:26: error: ‘registered_timers_’ was not declared in this scope; did you mean ‘registerTimer’?
411 | if (timer_info_it != registered_timers_.end()) {
| ^~~~~~~~~~~~~~~~~~
| registerTimer
timer_mgr.cc:408:48: warning: unused parameter ‘timer_name’ [-Wunused-parameter]
408 | TimerMgrImpl::timerCallback(const std::string& timer_name) {
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
make[5]: *** [Makefile:1641: libkea_dhcpsrv_la-timer_mgr.lo] Error 1
And indeed, the fix gcc suggests works:
--- kea-1.9.10/src/lib/dhcpsrv/timer_mgr.cc
+++ kea-1.9.10/src/lib/dhcpsrv/timer_mgr.cc
@@ -13,6 +13,7 @@
#include <util/multi_threading_mgr.h>
#include <boost/scoped_ptr.hpp>
+#include <map>
#include <functional>
#include <utility>