[clang-tools-extra] [clang-tidy] Support C++26 placeholder bindings (PR #207604)

Yanzuo Liu via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 28 02:34:24 PDT 2026


https://github.com/zwuis commented:

> > Personally I want to name this check `modernize-unused-variables` to support
> > 
> > * adding `[[maybe_unused]]` instead of renaming the variable to `_` (controlled by an option)
> > * 'simple' variables
> > 
> > in future.
> > 
> > But, I want fixits to add `[[maybe_unused]]` by default, because `[[maybe_unused]]` is introduced earlier and it works with `assert`, so I'd like to keep this name and make it an alias in future. (changing default fixits is a kind of breaking changes to me)
> 
> Do you imagine this case?
> 
> ```cpp
> struct Pair {
>   int first;
>   bool second;
> };
> 
> void referenceBinding() {
>   Pair p{};
>   auto &[x, y [[maybe_unused]] ] = p;
>   use(x);
> }
> ```
> 
> It gives the following so we still have to emit only in C++26 mode (or I'm missing something):
> 
> ```
> <source>:16:15: warning: an attribute specifier sequence attached to a structured binding declaration is a C++2c extension [-Wc++26-extensions]
>    16 |   auto &[x, y [[maybe_unused]] ] = p;
>       |
> ```
> 
> https://godbolt.org/z/13685qc37

Oh I didn't make it clear. I meant

```cpp
int x = foo();
(void)x;

// fixit 1
int x [[maybe_unused]] = foo();

// vs

// fixit 2
int _ = foo();
```

https://github.com/llvm/llvm-project/pull/207604


More information about the cfe-commits mailing list