Our minimum required Clang is 16. Building with Clang-16 on Debian Bookworm is broken due to issue with capnp. See more details here: https://github.com/bitcoin-core/libmultiprocess/issues/199.
# clang-16 --version
Debian clang version 16.0.6 (15~deb12u1)
cmake --build build
...
In file included from /bitcoin/src/ipc/libmultiprocess/src/mp/util.cpp:6:
In file included from /bitcoin/src/ipc/libmultiprocess/include/mp/util.h:8:
In file included from /usr/include/capnp/schema.h:39:
In file included from /usr/include/capnp/schema.capnp.h:6:
In file included from /usr/include/capnp/generated-header-support.h:27:
In file included from /usr/include/capnp/layout.h:34:
/usr/include/capnp/blob.h:176:74: error: invalid operands to binary expression ('const char *' and 'kj::StringPtr')
inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
~ ^ ~~~~~~~~~~~~
/usr/include/kj/common.h:744:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MaxValue_' for 2nd argument
inline bool operator==(T t, MaxValue_) { return t == Decay<T>(maxValue); }
^
/usr/include/kj/common.h:744:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MaxValue_' for 1st argument
/usr/include/kj/common.h:746:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MinValue_' for 2nd argument
inline bool operator==(T t, MinValue_) { return t == Decay<T>(minValue); }
^
/usr/include/kj/common.h:746:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MinValue_' for 1st argument
/usr/include/capnp/blob.h:176:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
^ ~~~~~~~~~~~~
/usr/include/capnp/blob.h:176:13: note: candidate function (with reversed parameter order) not viable: no known conversion from 'const char *' to 'const Text::Builder' for 1st argument
inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
^ ~
/usr/include/capnp/blob.h:177:74: error: invalid operands to binary expression ('const char *' and 'kj::StringPtr')
inline bool operator!=(const char* a, const Text::Builder& b) { return a != b.asString(); }
~ ^ ~~~~~~~~~~~~
/usr/include/kj/common.h:744:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MaxValue_' for 2nd argument
inline bool operator==(T t, MaxValue_) { return t == Decay<T>(maxValue); }
^
/usr/include/kj/common.h:744:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MaxValue_' for 1st argument
/usr/include/kj/common.h:746:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MinValue_' for 2nd argument
inline bool operator==(T t, MinValue_) { return t == Decay<T>(minValue); }
^
/usr/include/kj/common.h:746:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MinValue_' for 1st argument
/usr/include/capnp/blob.h:176:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
^
/usr/include/capnp/blob.h:177:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
inline bool operator!=(const char* a, const Text::Builder& b) { return a != b.asString(); }
^ ~~~~~~~~~~~~
2 errors generated.
This should be fixed / documented / worked around for 30.0.