C++ Core Guidelines Adoption
April 8, 2026 ยท View on GitHub
Last reviewed: 2026-04-08
This repository is primarily Rust. This policy exists to codify how we handle C/C++ code when it appears (FFI boundaries, native helpers, vendor integrations, tools, or future modules).
Scope
- Applies to all C and C++ code introduced or modified in
vtcode. - For non-C++ code (including Rust), use the same intent: explicit ownership, strong interfaces, safety-first defaults, and minimal complexity.
Mandatory C++ Rules
- Target ISO C++20 or newer. Avoid non-standard compiler extensions unless required by a platform boundary.
- Model ownership explicitly. Do not transfer ownership via raw
T*orT&. - Avoid naked
new/deleteandmalloc/freein application code. Prefer RAII handles (std::unique_ptr,std::shared_ptr, standard containers, scoped wrappers). - Prefer
std::span,std::string_view, and strong types over pointer+length and primitive argument bundles. - Avoid C-style casts. Prefer no cast; if unavoidable, use explicit named casts and isolate risky casts.
- Constructors must establish invariants; if that fails, fail construction (exception/factory error path).
- Keep mutable global state to an absolute minimum and document every exception.
- Keep interfaces explicit and strongly typed; avoid boolean flag arguments that obscure intent.
- Prefer standard-library algorithms/containers over hand-rolled low-level code.
- Mark truly non-throwing low-level operations
noexceptwhere appropriate.
Review and Enforcement
- PRs that touch C/C++ should be reviewed against this file and the C++ Core Guidelines.
- If a rule must be violated for ABI/platform/performance reasons, encapsulate the violation, add a focused code comment, and document rationale in the PR.
- Keep deviations local and do not leak unsafe patterns across module boundaries.