https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114311

            Bug ID: 114311
           Summary: wrong "error: ‘this’ is not a constant expression"
                    with consteval member function
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: carlo at gcc dot gnu.org
  Target Milestone: ---

The following snippet:

```
template<int Id>
struct SymbolRef { };

struct Symbol {
  int const id_;

  consteval Symbol() : id_(1) { }

  template<int Id>
  consteval operator SymbolRef<Id>() const
  {
    return SymbolRef<id_>{};
  }
};
```

fails with error:

```
source>: In member function 'consteval Symbol::operator SymbolRef<Id>() const':
<source>:12:22: error: '*(const Symbol*)this' is not a constant expression
   12 |     return SymbolRef<id_>{};
      |                      ^~~
<source>:12:22: note: in template argument for type 'int'
```

Not a regression.

DOES compile with using `this->id_`.

Reply via email to