mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-05 02:33:07 +02:00
44 lines
1.3 KiB
CMake
44 lines
1.3 KiB
CMake
# Copyright (c) 2026-present The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or https://opensource.org/license/mit/.
|
|
|
|
include_guard(GLOBAL)
|
|
|
|
# Checks for C++ features required to compile Bitcoin Core.
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
|
|
function(check_cxx_features)
|
|
set(CMAKE_REQUIRED_QUIET TRUE)
|
|
|
|
message(STATUS "Checking for required C++ features")
|
|
|
|
# Checks for Class Template Argument Deduction for aggregate types - used in src/util/overloaded.h
|
|
check_cxx_source_compiles("
|
|
#include <variant>
|
|
|
|
template<class... Ts> struct Overloaded : Ts... { using Ts::operator()...; };
|
|
|
|
int main() {
|
|
std::variant<int, double> v = 42;
|
|
return std::visit(Overloaded{
|
|
[](int) { return 0; },
|
|
[](double) { return 1; }
|
|
}, v);
|
|
}
|
|
" HAVE_CTAD_FOR_AGGREGATES)
|
|
|
|
if(NOT HAVE_CTAD_FOR_AGGREGATES)
|
|
message(FATAL_ERROR
|
|
"Compiler lacks Class Template Argument Deduction (CTAD) for aggregates.\n"
|
|
"This C++ feature is required for src/util/overloaded.h.\n"
|
|
"You are probably using an old compiler version\n"
|
|
"The recommended compiler versions can be checked in\n"
|
|
"doc/dependencies.md#compiler.\n"
|
|
)
|
|
endif()
|
|
|
|
message(STATUS "Checking for required C++ features - done")
|
|
|
|
endfunction()
|