Update: Using C++26 with contracts enabled
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
# Build directories
|
# Build directories
|
||||||
build/
|
build/
|
||||||
|
build-gcc26/
|
||||||
cmake-build-*/
|
cmake-build-*/
|
||||||
out/
|
out/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
@@ -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()
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <contracts>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
void handle_contract_violation(const std::contracts::contract_violation&) {
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user