From aa83b1c5059aa1d05610b2f190a02f624c4b620c Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 20 Jul 2026 17:00:09 -0400 Subject: [PATCH] fix(cpp): silence unused-parameter warnings for empty objects (#2362) Empty JSON Schema objects generate C++ from_json/to_json functions whose j and/or x parameters go unreferenced, tripping -Wunused-parameter under -Werror. Emit (void)j;/(void)x; for classes with no properties. Co-Authored-By: gpt-5.6-sol via pi --- .../src/language/CPlusPlus/CPlusPlusRenderer.ts | 9 +++++++++ test/languages.ts | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index ec99e8029b..ecfd6d62a3 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -1373,6 +1373,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ], false, () => { + if (c.getProperties().size === 0) { + this.emitLine("(void)j;"); + this.emitLine("(void)x;"); + } + this.forEachClassProperty(c, "none", (name, json, p) => { const [, , setterName] = defined( this._gettersAndSettersForPropertyName.get(name), @@ -1562,6 +1567,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { false, () => { this.emitLine("j = json::object();"); + if (c.getProperties().size === 0) { + this.emitLine("(void)x;"); + } + this.forEachClassProperty(c, "none", (name, json, p) => { const propType = p.type; cppType = this.cppType( diff --git a/test/languages.ts b/test/languages.ts index 6bcfd43611..1e7d486a4f 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -688,7 +688,8 @@ export const CPlusPlusLanguage: Language = { base: "test/fixtures/cplusplus", setupCommand: "curl -o json.hpp https://raw.githubusercontent.com/nlohmann/json/87df1d6708915ffbfa26a051ad7562ecc22e5579/src/json.hpp", - compileCommand: "g++ -O0 -o quicktype -std=c++17 main.cpp", + compileCommand: + "g++ -O0 -o quicktype -std=c++17 -Werror=unused-parameter main.cpp", runCommand(sample: string) { return `./quicktype "${sample}"`; },