Issue 108095
Summary [[maybe_unused]] attribute used inside a template argument specifying a type of a function causes a compilation error
Labels new issue
Assignees
Reporter jarzec
    If a specification of a type of a function in a template argument uses the `[[maybe_unused]]` attribute an error is raised - the initial `[` is interpreted as a beginning of a lambda capture.
This description is quite a mouthful, so let me give an example. The following code:
```
//...
std::function<int([[maybe_unused]] int)> f = fun;
//...
```
Causes the following error:
```
<source>:9:24: error: expected variable name or 'this' in lambda capture list
    9 | std::function<int([[maybe_unused]] int)> f = fun;
      | ^
<source>:11:2: error: expected '>'
   11 | }
      | ^
<source>:9:18: note: to match this '<'
    9 | std::function<int([[maybe_unused]] int)> f = fun;
      | ^
<source>:11:2: error: expected unqualified-id
   11 | }
      | ^
<source>:11:2: error: expected '}'
<source>:8:1: note: to match this '{'
    8 | {
      | ^
4 errors generated.
Compiler returned: 1
```
The quoted error is for **x86-64 clang 18.1.0** from [godbolt](https://godbolt.org/z/6YoPnYcsj), but it is almost identical for all versions (at least) since 12.0.0.

I agree the [[maybe_unused]] attribute makes little sense in the presented context. However, at least to my understanding, the mentioned example is valid C++ syntax. I also believe a valid use case where it should be accepted is generated code. This, in fact, is how the issue was identified.
Other compilers (GCC and MSVC) correctly compile the code.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to