🎫 Exemption Request Template¶
📋 Request Details¶
Requestor: [Name] Date: [YYYY-MM-DD] Code Location: [File:Line or Module]
🚫 Rule to Exempt¶
Rule ID: [e.g., clang-tidy: modernize-use-auto] Current behavior: [What happens now] Desired behavior: [What you want instead]
🎯 Justification¶
Why necessary: [Explain in detail why standard can't be followed]
Alternatives considered: 1. [Alternative 1] - Why rejected: ... 2. [Alternative 2] - Why rejected: ...
Risk mitigation: [How you minimize risks of exemption]
⏰ Duration¶
- Temporary (until [DATE])
- Permanent (explain why)
👥 Review¶
Requires approval from: Tech Lead Review deadline: [DATE]
✅ Approval¶
Approved by: _______________ Date: _______________ Notes: _______________
📝 Example Requests¶
Example 1: Performance-Critical Code¶
Requestor: John Doe Date: 2025-01-15 Code Location: src/dsp/convolution.cpp:234-267
Rule to Exempt - Rule ID: cppcoreguidelines-pro-bounds-pointer-arithmetic - Current behavior: Clang-tidy warns about raw pointer arithmetic - Desired behavior: Allow pointer arithmetic in hot loop
Justification
Why necessary: SIMD-optimized convolution requires direct pointer manipulation for performance. Benchmarks show 40% performance regression with range-based loops.
Alternatives considered: 1. gsl::span - Adds bounds checking overhead (15% slower) 2. std::vector iterators - Not compatible with SIMD intrinsics 3. Custom iterator - Adds complexity, no performance gain
Risk mitigation: - Static assertions verify alignment - Comprehensive unit tests with address sanitizer - Input size validated before loop - Comments explain pointer arithmetic
Duration: ☑ Permanent (performance-critical audio code)
Example 2: Third-Party Integration¶
Requestor: Jane Smith Date: 2025-02-01 Code Location: src/external/vst_wrapper.cpp
Rule to Exempt - Rule ID: modernize-use-nullptr, readability-identifier-naming - Current behavior: VST2 SDK uses NULL and non-standard naming - Desired behavior: Match VST2 SDK conventions in wrapper
Justification
Why necessary: VST2 SDK defines interfaces with specific naming conventions and NULL usage. Wrapper must match SDK types exactly for binary compatibility.
Alternatives considered: 1. Fork VST2 SDK - Creates maintenance burden 2. Type aliases - Breaks with SDK headers 3. Adapter layer - Adds indirection overhead
Risk mitigation: - Isolate VST2 code in dedicated namespace - Document exemption at file level - Add static_assert for type compatibility - Limit scope to VST2 wrapper only
Duration: ☑ Permanent (external SDK compatibility)