* Package:    dev-build/b2-5.4.2:0
 * Repository: gentoo
 * Maintainer: soap@gentoo.org
 * USE:        abi_x86_64 amd64 elibc_glibc kernel_linux
 * FEATURES:   network-sandbox preserve-libs sandbox userpriv usersandbox
>>> Unpacking source...
>>> Unpacking 'b2-5.4.2.tar.gz' to /var/tmp/portage/dev-build/b2-5.4.2/work
>>> Source unpacked in /var/tmp/portage/dev-build/b2-5.4.2/work
>>> Preparing source in /var/tmp/portage/dev-build/b2-5.4.2/work/b2-5.4.2/src ...
  [ ok ]
  [ ok ]
  [ ok ]
  [ ok ]
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/dev-build/b2-5.4.2/work/b2-5.4.2/src ...
>>> Source configured.
>>> Compiling source in /var/tmp/portage/dev-build/b2-5.4.2/work/b2-5.4.2/src ...
 * /usr/bin/bash ./build.sh cxx --cxx=x86_64-pc-linux-gnu-g++ '--cxxflags=-pthread -O3 -march=native -mtune=native -fomit-frame-pointer -pipe -flto=auto  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -flto=auto' -d+2 --without-python
ls: cannot access '/opt/IBM/openxlC/17.*/bin/ibm-clang++_r': No such file or directory

###
###
### Using 'cxx' toolset.
###
###

x86_64-pc-linux-gnu-g++ (Gentoo 16.2.1_p20260926 p1) 16.2.1 20260926
Copyright (C) 2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


###
###

> x86_64-pc-linux-gnu-g++ -pthread -O3 -march=native -mtune=native -fomit-frame-pointer -pipe -flto=auto -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -flto=auto -DNDEBUG bindjam.cpp builtins.cpp class.cpp command.cpp compile.cpp constants.cpp cwd.cpp debug.cpp debugger.cpp events.cpp execcmd.cpp execnt.cpp execunix.cpp filent.cpp filesys.cpp fileunix.cpp frames.cpp function.cpp glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam_strings.cpp jam.cpp jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp native.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp startup.cpp tasks.cpp timestamp.cpp value.cpp variable.cpp w32_getreg.cpp mod_args.cpp mod_command_db.cpp mod_db.cpp mod_jam_builtin.cpp mod_jam_class.cpp mod_jam_errors.cpp mod_jam_modules.cpp mod_order.cpp mod_path.cpp mod_property_set.cpp mod_regex.cpp mod_sequence.cpp mod_set.cpp mod_string.cpp mod_summary.cpp mod_sysinfo.cpp mod_version.cpp -o b2
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from frames.h:12,
                 from bindjam.h:11,
                 from bindjam.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1> >’:
bindjam.cpp:546:52:   required from ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1> >’
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                                                                  ^~~~~
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:313:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<>::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = void (*)(std::__cxx11::basic_string<char>, b2::value_ref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:313:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::__cxx11::basic_string<char>, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = void (*)(std::__cxx11::basic_string<char>, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:315:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  315 |                         .def(&poke, "poke",
      |                         ~~~~^~~~~~~~~~~~~~~
  316 |                                 "module_name" * _01 | "variables" * _1n | "value" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<2>, b2::bind::arg_<1> >’:
bindjam.cpp:546:52:   required from ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                                                                  ^~~~~
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:320:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  315 |                         .def(&poke, "poke",
      |                         ~~~~~~~~~~~~~~~~~~~
  316 |                                 "module_name" * _01 | "variables" * _1n | "value" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  317 |                         .def(&peek, "peek", "module_name" * _01 | "variables" * _1n)
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  318 |                         .def(&clone_rules, "clone-rules",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  319 |                                 "source_module" * _1 + "target_module" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  320 |                         .def(&call_in, "call-in",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~
  321 |                                 "module_name" * _01 | ("rule_name" * _1 + "a1" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  322 |                                         | "rest" * _r)
      |                                         ~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<2>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = b2::list_ref (*)(b2::value_ref, std::tuple<b2::value_ref, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<1>, b2::bind::arg_<2>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:320:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  315 |                         .def(&poke, "poke",
      |                         ~~~~~~~~~~~~~~~~~~~
  316 |                                 "module_name" * _01 | "variables" * _1n | "value" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  317 |                         .def(&peek, "peek", "module_name" * _01 | "variables" * _1n)
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  318 |                         .def(&clone_rules, "clone-rules",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  319 |                                 "source_module" * _1 + "target_module" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  320 |                         .def(&call_in, "call-in",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~
  321 |                                 "module_name" * _01 | ("rule_name" * _1 + "a1" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  322 |                                         | "rest" * _r)
      |                                         ~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<2>, b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<3>, b2::bind::arg_<1> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<3>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<3>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::tuple<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<3>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::tuple<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<3>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = void (*)(std::tuple<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, b2::list_ref>, const b2::lists&, b2::bind::context_ref_); A = {b2::bind::arg_<3>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_jam_errors.h:187:8:   required from ‘void b2::jam::errors::errors_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  186 |                 binder
      |                 ~~~~~~       
  187 |                         .def(&backtrace, "backtrace",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
  188 |                                 ("skip-frames" * _1 + "prefix" * _1 + "messages" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  189 |                                         | ("rest" * _r))
      |                                         ~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::errors::errors_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:821:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819 |                 .bind(jam::builtin::root_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  820 |                 .bind(jam::klass::class_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  821 |                 .bind(jam::errors::errors_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<3>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’:
bindjam.cpp:546:52:   required from ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                                                                  ^~~~~
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_regex.h:233:8:   required from ‘void b2::regex_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  220 |                 binder.def(&regex_split, "split", "string" * _1 + "separator" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  221 |                         .def(
      |                         ~~~~~
  222 |                                 &regex_split_each, "split-list", "list" * _n | "separator" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  223 |                         .def(&regex_match, "match",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  224 |                                 "pattern" * _1 | "string" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  225 |                         .def(&regex_transform, "transform",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  226 |                                 "list" * _n | "pattern" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  227 |                         .def(&regex_escape, "escape",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  228 |                                 "string" * _1 | "symbols" * _1 | "escape-symbol" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  229 |                         .def(&regex_replace, "replace",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  230 |                                 "string" * _1 + "match" * _1 + "replacement" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  231 |                         .def(&regex_replace_each, "replace-list",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  232 |                                 "list" * _n | "match" * _1 | "replacement" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  233 |                         .def(&regex_grep, "grep",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~
  234 |                                 "directories" * _1n | "files" * _1n | "patterns" * _1n
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  235 |                                         | "result_expressions" * _n | "options" * _n);
      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::regex_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:823:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819 |                 .bind(jam::builtin::root_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  820 |                 .bind(jam::klass::class_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  821 |                 .bind(jam::errors::errors_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  822 |                 .bind(paths::paths_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  823 |                 .bind(regex_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = b2::list_ref (*)(b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref, b2::list_cref); A = {b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
mod_regex.h:233:8:   required from ‘void b2::regex_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  220 |                 binder.def(&regex_split, "split", "string" * _1 + "separator" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  221 |                         .def(
      |                         ~~~~~
  222 |                                 &regex_split_each, "split-list", "list" * _n | "separator" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  223 |                         .def(&regex_match, "match",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  224 |                                 "pattern" * _1 | "string" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  225 |                         .def(&regex_transform, "transform",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  226 |                                 "list" * _n | "pattern" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  227 |                         .def(&regex_escape, "escape",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  228 |                                 "string" * _1 | "symbols" * _1 | "escape-symbol" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  229 |                         .def(&regex_replace, "replace",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  230 |                                 "string" * _1 + "match" * _1 + "replacement" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  231 |                         .def(&regex_replace_each, "replace-list",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  232 |                                 "list" * _n | "match" * _1 | "replacement" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  233 |                         .def(&regex_grep, "grep",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~
  234 |                                 "directories" * _1n | "files" * _1n | "patterns" * _1n
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  235 |                                         | "result_expressions" * _n | "options" * _n);
      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::regex_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:823:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819 |                 .bind(jam::builtin::root_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  820 |                 .bind(jam::klass::class_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  821 |                 .bind(jam::errors::errors_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  822 |                 .bind(paths::paths_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  823 |                 .bind(regex_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<1>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1>, b2::bind::arg_<1> >::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<2> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<2> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<2> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >); A = {b2::bind::arg_<2>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = void (*)(std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >); A = {b2::bind::arg_<2>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = void (*)(std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >); A = {b2::bind::arg_<2>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
bind.h:426:19:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::arg_<C>) [with F = void (*)(std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >); int C = 2; Binder = b2::jam::jam_binder]’
  426 |                 return this->def(
      |                        ~~~~~~~~~^
  427 |                         function, name, args_<arg_<C>> { { std::make_tuple(args) } });
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_jam_modules.h:318:8:   required from ‘void b2::jam::modules::modules_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  312 |                 binder.def(&binding, "binding", "module_name" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  313 |                         .def(&record_binding, "record-binding",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314 |                                 "module_name" * _1 | "value" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  315 |                         .def(&poke, "poke",
      |                         ~~~~~~~~~~~~~~~~~~~
  316 |                                 "module_name" * _01 | "variables" * _1n | "value" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  317 |                         .def(&peek, "peek", "module_name" * _01 | "variables" * _1n)
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  318 |                         .def(&clone_rules, "clone-rules",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  319 |                                 "source_module" * _1 + "target_module" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::jam::modules::modules_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:818:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<2>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<>::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bindjam.cpp: In instantiation of ‘struct b2::jam::jam_arg_spec_count_sum<b2::bind::arg_<3> >’:
bindjam.cpp:560:36:   required from ‘struct b2::jam::jam_arg_spec_max_size<b2::bind::arg_<3> >’
  560 |                         + jam_arg_spec_count_sum<A...>::value * 2 + 2
      |                                                         ^~~~~
bindjam.cpp:574:49:   required from ‘struct b2::jam::jam_arg_spec<b2::bind::arg_<3> >’
  574 |         const char * spec[jam_arg_spec_max_size<A...>::value];
      |                                                        ^~~~~
bindjam.cpp:792:21:   required from ‘void b2::jam::jam_binder::bind_function(const char*, const char*, b2::bind::args_<A ...>, Function) [with Function = b2::value_ref (*)(const std::tuple<b2::value_ref, b2::value_ref, b2::value_ref>&); A = {b2::bind::arg_<3>}]’
  792 |         jam_arg_spec<A...> arg_spec { args };
      |                            ^~~~~~~~
bind.h:492:23:   required from ‘void b2::bind::binder_<Binder>::def_function(const char*, b2::bind::args_<A ...>, Function) [with Function = b2::value_ref (*)(const std::tuple<b2::value_ref, b2::value_ref, b2::value_ref>&); A = {b2::bind::arg_<3>}; Binder = b2::jam::jam_binder]’
  492 |                 self().bind_function(current_module_name, function_name, args, f);
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:420:22:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::args_<A ...>) [with F = b2::value_ref (*)(const std::tuple<b2::value_ref, b2::value_ref, b2::value_ref>&); A = {b2::bind::arg_<3>}; Binder = b2::jam::jam_binder]’
  420 |                 self().def_function(name, args, function);
      |                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
bind.h:426:19:   required from ‘b2::bind::binder_<Binder>& b2::bind::binder_<Binder>::def(F, const char*, b2::bind::arg_<C>) [with F = b2::value_ref (*)(const std::tuple<b2::value_ref, b2::value_ref, b2::value_ref>&); int C = 3; Binder = b2::jam::jam_binder]’
  426 |                 return this->def(
      |                        ~~~~~~~~~^
  427 |                         function, name, args_<arg_<C>> { { std::make_tuple(args) } });
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_regex.h:229:8:   required from ‘void b2::regex_module::def(Binder&) [with Binder = b2::jam::jam_binder]’
  220 |                 binder.def(&regex_split, "split", "string" * _1 + "separator" * _1)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  221 |                         .def(
      |                         ~~~~~
  222 |                                 &regex_split_each, "split-list", "list" * _n | "separator" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  223 |                         .def(&regex_match, "match",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  224 |                                 "pattern" * _1 | "string" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  225 |                         .def(&regex_transform, "transform",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  226 |                                 "list" * _n | "pattern" * _1 | "indices" * _n)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  227 |                         .def(&regex_escape, "escape",
      |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  228 |                                 "string" * _1 | "symbols" * _1 | "escape-symbol" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  229 |                         .def(&regex_replace, "replace",
      |                         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
  230 |                                 "string" * _1 + "match" * _1 + "replacement" * _1)
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind.h:463:8:   required from ‘Binder& b2::bind::binder_<Binder>::bind(Module) [with Module = b2::regex_module; Binder = b2::jam::jam_binder]’
  463 |                 m.def(self());
      |                 ~~~~~^~~~~~~~
bindjam.cpp:823:8:   required from here
  815 |         binder
      |         ~~~~~~        
  816 |                 // These have to be done in dependency order so that the init code
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  817 |                 // each executes is valid.
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
  818 |                 .bind(jam::modules::modules_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819 |                 .bind(jam::builtin::root_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  820 |                 .bind(jam::klass::class_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  821 |                 .bind(jam::errors::errors_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  822 |                 .bind(paths::paths_module())
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  823 |                 .bind(regex_module())
      |                 ~~~~~^~~~~~~~~~~~~~~~
bindjam.cpp:546:34: warning: arithmetic between different enumeration types ‘b2::bind::arg_<3>::<unnamed enum>’ and ‘b2::jam::jam_arg_spec_count_sum<>::<unnamed enum>’ is deprecated [-Wdeprecated-enum-enum-conversion]
  546 |                 value = X::count + jam_arg_spec_count_sum<A...>::value
      |                            ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from builtins.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from class.h:9,
                 from class.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from command.cpp:18:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from compile.cpp:24:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from constants.cpp:18:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from cwd.h:16,
                 from cwd.cpp:9:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from debug.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from debugger.h:13,
                 from debugger.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from frames.h:12,
                 from function.h:13,
                 from rules.h:35,
                 from events.h:12,
                 from events.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from execcmd.cpp:11:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from execnt.cpp:39:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from execunix.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from filent.cpp:31:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from filesys.cpp:30:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from fileunix.cpp:30:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from frames.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from function.cpp:9:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from glob.cpp:27:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from hash.cpp:19:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from hcache.cpp:32:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from hdrmacro.cpp:30:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from headers.cpp:26:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from jam_strings.cpp:5:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from jam.cpp:99:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from src/engine/jamgram.y:100:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from lists.cpp:17:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from make.cpp:33:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from make1.cpp:39:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from mem.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from modules.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from frames.h:12,
                 from function.h:13,
                 from native.h:11,
                 from native.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from output.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from parse.cpp:14:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from pathnt.cpp:19:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from pathsys.cpp:30:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from pathunix.cpp:19:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from regexp.h:12,
                 from regexp.cpp:48:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from rules.cpp:31:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from scan.cpp:12:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from search.cpp:14:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from frames.h:12,
                 from startup.h:11,
                 from startup.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from mod_sysinfo.h:13,
                 from tasks.h:12,
                 from tasks.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from timestamp.cpp:27:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from value.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from variable.cpp:33:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from w32_getreg.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_args.h:12,
                 from mod_args.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_args.h:12,
                 from mod_command_db.h:13,
                 from mod_command_db.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_db.h:13,
                 from mod_db.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
mod_db.cpp: In member function ‘void b2::property_db::emplace(b2::list_cref, b2::value_ref)’:
mod_db.cpp:20:26: warning: C++20 says that these are ambiguous, even though the second is reversed:
   20 |                 if (a == array_tag)
      |                          ^~~~~~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from mod_jam_builtin.h:13,
                 from mod_jam_builtin.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_jam_class.h:13,
                 from mod_jam_class.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_jam_errors.h:13,
                 from mod_jam_errors.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_jam_modules.h:13,
                 from mod_jam_modules.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_order.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_path.h:13,
                 from mod_path.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from mod_property_set.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_regex.h:13,
                 from mod_regex.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from frames.h:12,
                 from function.h:13,
                 from native.h:11,
                 from mod_sequence.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_set.h:13,
                 from mod_set.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from mod_string.h:13,
                 from mod_string.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from mod_summary.h:13,
                 from mod_summary.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from mod_sysinfo.h:13,
                 from mod_sysinfo.cpp:7:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
In file included from object.h:12,
                 from constants.h:15,
                 from debug.h:12,
                 from mem.h:48,
                 from jam.h:553,
                 from lists.h:48,
                 from modules.h:13,
                 from mod_version.cpp:8:
value.h: In member function ‘bool b2::value_ref::operator==(const char*) const’:
value.h:144:46: warning: C++20 says that these are ambiguous, even though the second is reversed:
  144 |                 return (*this) == value_ref(v);
      |                                              ^
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
value.h: In instantiation of ‘bool b2::value_ref::operator!=(T) const [with T = b2::value_ref]’:
lists.h:428:30:   required from here
  428 |                 if (v != value_ref(*(b_i++))) return false;
      |                                            ^
value.h:149:34: warning: C++20 says that these are ambiguous, even though the second is reversed:
  149 |                 return !((*this) == v);
      |                         ~~~~~~~~~^~~~~
value.h:141:21: note: candidate 1: ‘bool b2::value_ref::operator==(b2::value_ptr) const’
  141 |         inline bool operator==(value_ptr b) const { return val->equal_to(*b); }
      |                     ^~~~~~~~
value.h:141:21: note: candidate 2: ‘bool b2::value_ref::operator==(b2::value_ptr) const’ (reversed)
>>> Source compiled.
 * Skipping make test/check due to ebuild restriction.
>>> Test phase [disabled because of RESTRICT=test]: dev-build/b2-5.4.2

>>> Install dev-build/b2-5.4.2 into /var/tmp/portage/dev-build/b2-5.4.2/image
>>> Completed installing dev-build/b2-5.4.2 into /var/tmp/portage/dev-build/b2-5.4.2/image

 * Final size of build directory: 9340 KiB (9.1 MiB)
 * Final size of installed tree:  3372 KiB (3.2 MiB)

strip: x86_64-pc-linux-gnu-strip --strip-unneeded -N __gentoo_check_ldflags__ -R .comment -R .GCC.command.line -R .note.gnu.gold-version
   /usr/bin/b2