Update: Using C++26 with contracts enabled

This commit is contained in:
David Gil de Gómez Pérez
2026-08-12 13:19:12 +03:00
parent ea0e601850
commit 583f8d73db
5 changed files with 76 additions and 0 deletions
+1
View File
@@ -1,5 +1,6 @@
# Build directories
build/
build-gcc26/
cmake-build-*/
out/
+58
View File
@@ -0,0 +1,58 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 20,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Default (system compiler)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"COURSE_ENABLE_CONTRACTS": "ON"
}
},
{
"name": "gcc26-contracts",
"displayName": "GCC 16 + C++26 contracts (recommended)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build-gcc26",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "/opt/homebrew/bin/gcc-16",
"CMAKE_CXX_COMPILER": "/opt/homebrew/bin/g++-16",
"COURSE_ENABLE_CONTRACTS": "ON"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default"
},
{
"name": "gcc26-contracts",
"configurePreset": "gcc26-contracts"
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"output": {
"outputOnFailure": true
}
},
{
"name": "gcc26-contracts",
"configurePreset": "gcc26-contracts",
"output": {
"outputOnFailure": true
}
}
]
}
+3
View File
@@ -0,0 +1,3 @@
# Use GCC 16 for C++26 contracts support on macOS (Homebrew).
set(CMAKE_C_COMPILER "/opt/homebrew/bin/gcc-16" CACHE FILEPATH "C compiler")
set(CMAKE_CXX_COMPILER "/opt/homebrew/bin/g++-16" CACHE FILEPATH "C++ compiler")
+8
View File
@@ -0,0 +1,8 @@
add_library(course_contract_support STATIC contract_handler.cpp)
target_compile_features(course_contract_support PUBLIC cxx_std_26)
set_target_properties(course_contract_support PROPERTIES POSITION_INDEPENDENT_CODE ON)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND COURSE_ENABLE_CONTRACTS)
target_compile_options(course_contract_support PRIVATE -fcontracts)
target_link_options(course_contract_support PRIVATE -fcontracts)
endif()
+6
View File
@@ -0,0 +1,6 @@
#include <contracts>
#include <cstdlib>
void handle_contract_violation(const std::contracts::contract_violation&) {
std::abort();
}