4.5 KiB
4.5 KiB
Modern C++ Course (Basics → C++26)
A hands-on C++ course with 56 Google Test exercises organized into 14 modules, from your first functions to modern standard-library features.
Requirements
- CMake 3.20+
- GCC 16+ with C++26 and contracts support
- CLion (recommended) or any CMake-aware IDE
- Internet access on first configure (Google Test is fetched automatically)
Install GCC 16 on macOS (Homebrew):
brew install gcc@16
Quick Start (CLion)
- Open this folder in CLion (
File → Open…). - Use the
defaultCMake profile (GCC 16 + C++26fromCMakePresets.json). - Set the toolchain to GCC 16 (
/opt/homebrew/bin/g++-16). - Disable Clang-based analysis (this project targets GCC only):
- Settings → Languages & Frameworks → C/C++ → Clangd → disable, or
- Settings → Editor → Inspections → C/C++ → General → Clang-Tidy → disable
- Reload CMake, pick an exercise target (e.g.
02_control_flow_loops), implement TODOs, run tests.
Quick Start (Terminal)
cmake --preset default
cmake --build build
ctest --test-dir build --output-on-failure
Run a single exercise:
cmake --build build --target 02_control_flow_loops
./build/modules/02_control_flow/02_control_flow_loops
Manual configure (without presets):
cmake -S . -B build \
-DCMAKE_CXX_COMPILER=/opt/homebrew/bin/g++-16 \
-DCMAKE_C_COMPILER=/opt/homebrew/bin/gcc-16 \
-DCOURSE_ENABLE_CONTRACTS=ON
cmake --build build
Project Structure
cppc/
├── CMakeLists.txt # Root project + Google Test
├── CMakePresets.json # GCC 16 + C++26 preset
├── cmake/
│ ├── CourseExercise.cmake # add_course_exercise() helper
│ ├── CourseOptions.cmake # Warnings, standards, contracts
│ └── toolchains/gcc-16.cmake # GCC 16 toolchain file
├── support/ # Contract violation handler
└── modules/
├── 01_fundamentals/
├── 02_control_flow/
└── ... # 14 modules total
Each module contains:
README.md— learning goals and exercise listinclude/— function and class declarationssrc/— your implementation (start here)test/— Google Test files (do not edit unless extending)
How to Study
- Read the module
README.md. - Open the exercise header to understand the required API.
- Implement TODOs in the corresponding
src/file. - Run that exercise’s test target in CLion or via CTest.
- Move to the next exercise only when tests pass.
Course Map
| Module | Topic | Exercises | Build standard |
|---|---|---|---|
| 01 | Fundamentals | 4 | C++26 |
| 02 | Control flow | 4 | C++26 |
| 03 | Functions | 4 | C++26 |
| 04 | Arrays & strings | 4 | C++26 |
| 05 | Pointers & references | 4 | C++26 |
| 06 | OOP basics | 4 | C++26 |
| 07 | STL containers | 4 | C++26 |
| 08 | STL algorithms | 4 | C++26 |
| 09 | C++11 features | 4 | C++26 |
| 10 | C++14 features | 4 | C++26 |
| 11 | C++17 features | 4 | C++26 |
| 12 | C++20 features | 4 | C++26 |
| 13 | C++23 features | 4 | C++26 |
| 14 | C++26 frontier | 4 | C++26 |
CMake Options
| Option | Default | Description |
|---|---|---|
COURSE_BUILD_TESTS |
ON | Build Google Test exercise targets |
COURSE_WARNINGS_AS_ERRORS |
OFF | Treat warnings as errors |
COURSE_ENABLE_CONTRACTS |
ON | Enable -fcontracts on GCC 16+ |
Example:
cmake --preset default -DCOURSE_WARNINGS_AS_ERRORS=ON
C++26 Contracts
On GCC 16+, the build enables:
-fcontracts-fcontract-evaluation-semantic=enforce- A shared
handle_contract_violationhandler insupport/contract_handler.cpp
Example:
#include <contracts>
[[nodiscard]] auto factorial(const int n) -> long long pre(n >= 0);
auto factorial(const int n) -> long long
pre(n >= 0)
{
// ...
}
CLion Tips
- Use the GCC 16 toolchain, not Apple Clang.
- Disable Clangd and Clang-Tidy inspections — they use the Clang frontend and do not support GCC C++26 contracts.
- Use CLion’s built-in GCC parser/inspections, or rely on compiler errors from the build.
- Use Run | Run… and filter by module prefix (e.g.
02_control_flow). - Enable Google Test integration to see individual tests in the tree view.
Notes on C++26
All exercises build with C++26. Module READMEs describe the language feature each exercise teaches (C++11, C++17, etc.), but the toolchain baseline is C++26 throughout.
Happy learning!