# 13eholder Modern Cpp Skills M06 Error Handling

> C++ Error Handling

- Skill: `tomevault-io/13eholder-modern-cpp-skills-m06-error-handling` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/13eholder-modern-cpp-skills-m06-error-handling`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/13eholder-modern-cpp-skills-m06-error-handling/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/13eholder-modern-cpp-skills-m06-error-handling

---


# C++ Error Handling

## Core Question

**Is this error recoverable?**

- **Yes (Local)**: `std::expected` or return code.
- **Yes (Distant)**: Exceptions (`throw`).
- **No (Bug)**: `assert` or `std::terminate`.

## Error → Design Question

| Issue                  | Design Question                                      |
| ---------------------- | ---------------------------------------------------- |
| **Uncaught Exception** | Did you forget to catch, or throw in `noexcept`?     |
| **Silent Failure**     | Did you ignore a return code? (Use `[[nodiscard]]`). |
| **Destructor Throw**   | Never throw from destructor (`std::terminate`).      |

## Thinking Prompt

1.  **Is absence valid?**
    - Yes? → `std::optional<T>`.

2.  **Does caller need details?**
    - Yes? → `std::expected<T, E>` or Exception.
    - No? → `bool` or `std::optional`.

3.  **Is it a Logic Error (Bug)?**
    - Yes? → `assert()` or `std::terminate()`. Do not throw for bugs in C++ (Contract Violation).

## Trace Up / Down

-   **Trace Up**:
    -   *Issue*: "Program aborted with 'terminate called recursively'."
    -   *Cause*: An exception was thrown while stack unwinding (in a destructor).
    -   *Fix*: Fix the destructor. Ensure RAII cleanup is `noexcept`.

## Quick Reference

| Mechanism           | Cost (Happy)   | Cost (Sad) | Use When                     |
| ------------------- | -------------- | ---------- | ---------------------------- |
| **`std::optional`** | Branch         | Branch     | Return may be empty.         |
| **`std::expected`** | Branch         | Branch     | Recoverable error (Parsing). |
| **Exception**       | Zero           | Huge       | Rare IO/Resource errors.     |
| **Assert**          | Zero (Release) | Abort      | Logic bugs / Invariants.     |

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/13eholder) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

