From e088c858212ebf9296b7491f289022267185da05 Mon Sep 17 00:00:00 2001 From: Alef LM Date: Mon, 8 Dec 2025 10:18:37 +0000 Subject: [PATCH] Enable C++20 support needed for Bitcoin core libraries. Update Boost 1.83.0 since 1.81.0 does not work with cpp20. --- CMakeLists.txt | 2 +- depends/packages/bdb.mk | 2 +- depends/packages/boost.mk | 6 +++--- depends/packages/qt.mk | 2 +- depends/packages/zeromq.mk | 2 +- src/init.cpp | 2 +- src/secp256k1/CMakeLists.txt | 2 +- src/support/allocators/mt_pooled_secure.h | 10 ++++++---- src/support/allocators/pooled_secure.h | 10 ++++++---- 9 files changed, 21 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 309f6d9c8a..703fea7369 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,7 +84,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE) set(CMAKE_PLATFORM_HAS_INSTALLNAME FALSE) endif() enable_language(CXX) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 491667e171..ee0f55116b 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -9,7 +9,7 @@ define $(package)_set_vars $(package)_config_opts=--disable-shared --enable-cxx --disable-replication $(package)_config_opts_mingw32=--enable-mingw $(package)_config_opts_linux=--with-pic -$(package)_cxxflags=-std=c++11 +$(package)_cxxflags=-std=c++20 $(package)_cc+=-Wno-error=implicit-function-declaration endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 9dc6b623f6..efa9ebc025 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,8 +1,8 @@ package=boost -$(package)_version=1.81.0 +$(package)_version=1.83.0 $(package)_download_path=https://archives.boost.io/release/$($(package)_version)/source/ $(package)_file_name=boost_$(subst .,_,$($(package)_version)).tar.bz2 -$(package)_sha256_hash=71feeed900fbccca04a3b4f2f84a7c217186f28a940ed8b7ed4725986baf99fa +$(package)_sha256_hash=6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e $(package)_dependencies=native_b2 $(package)_patches=fix_boost_jam_cross-compilation.patch @@ -21,7 +21,7 @@ $(package)_config_opts_i686_linux=address-model=32 architecture=x86 $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) $(package)_toolset_darwin=darwin -$(package)_cxxflags=-std=c++17 +$(package)_cxxflags=-std=c++20 $(package)_cxxflags_linux+=-fPIC $(package)_cxxflags_freebsd+=-fPIC $(package)_cxxflags_darwin+=-ffile-prefix-map=$($(package)_extract_dir)=/usr diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index ae53e773b6..bb2cc9e3a7 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -52,7 +52,7 @@ $(package)_config_opts_debug = -debug $(package)_config_opts = -no-egl $(package)_config_opts_debug += -optimized-tools $(package)_config_opts += -bindir $(build_prefix)/bin -$(package)_config_opts += -c++std c++17 +$(package)_config_opts += -c++std c++20 $(package)_config_opts += -confirm-license $(package)_config_opts += -no-cups $(package)_config_opts += -no-egl diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index 5c6b33fddf..430661fdd3 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -12,7 +12,7 @@ define $(package)_set_vars $(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking $(package)_config_opts_linux=--with-pic $(package)_config_opts_android=--with-pic - $(package)_cxxflags=-std=c++17 + $(package)_cxxflags=-std=c++20 ifdef GUIX_ENVIRONMENT $(package)_config_env_x86_64_darwin = LIB_LIBRARY_BACKUP="$(LIBRARY_PATH)" LIBRARY_PATH="" endif diff --git a/src/init.cpp b/src/init.cpp index 94cc400ab1..cb2eb25a00 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -2062,7 +2062,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler) while (!fHaveGenesis) { condvar_GenesisWait.wait(lock); } - uiInterface.NotifyBlockTip.disconnect(BlockNotifyGenesisWait); + uiInterface.NotifyBlockTip.disconnect(&BlockNotifyGenesisWait); } // ********************************************************* Step 12: start node diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt index 8e3cabf285..d8e63c083d 100644 --- a/src/secp256k1/CMakeLists.txt +++ b/src/secp256k1/CMakeLists.txt @@ -40,7 +40,7 @@ set(${PROJECT_NAME}_LIB_VERSION_AGE 0) #============================= set(CMAKE_C_STANDARD 90) set(CMAKE_C_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_EXTENSIONS OFF) #============================= diff --git a/src/support/allocators/mt_pooled_secure.h b/src/support/allocators/mt_pooled_secure.h index aded9b8ae1..f199af38f5 100644 --- a/src/support/allocators/mt_pooled_secure.h +++ b/src/support/allocators/mt_pooled_secure.h @@ -20,10 +20,12 @@ struct mt_pooled_secure_allocator : public std::allocator { typedef std::allocator base; typedef typename base::size_type size_type; typedef typename base::difference_type difference_type; - typedef typename base::pointer pointer; - typedef typename base::const_pointer const_pointer; - typedef typename base::reference reference; - typedef typename base::const_reference const_reference; + + typedef T* pointer; + typedef const T* const_pointer; + typedef T& reference; + typedef const T& const_reference; + typedef typename base::value_type value_type; mt_pooled_secure_allocator(size_type nrequested_size = 32, size_type nnext_size = 32, diff --git a/src/support/allocators/pooled_secure.h b/src/support/allocators/pooled_secure.h index 4c531c67f4..223971829f 100644 --- a/src/support/allocators/pooled_secure.h +++ b/src/support/allocators/pooled_secure.h @@ -25,10 +25,12 @@ struct pooled_secure_allocator : public std::allocator { typedef std::allocator base; typedef typename base::size_type size_type; typedef typename base::difference_type difference_type; - typedef typename base::pointer pointer; - typedef typename base::const_pointer const_pointer; - typedef typename base::reference reference; - typedef typename base::const_reference const_reference; + + typedef T* pointer; + typedef const T* const_pointer; + typedef T& reference; + typedef const T& const_reference; + typedef typename base::value_type value_type; pooled_secure_allocator(const size_type nrequested_size = 32, const size_type nnext_size = 32,