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

            Bug ID: 118812
           Summary: Improve diagnostic for non class used as a base class
                    (even a typedef)
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

Very much related to PR101519.

take:
```
typedef int t;
struct C : t { };
```

Currently GCC outputs:
```
<source>:2:14: error: expected class-name before '{' token
    2 | struct C : t { };
      |              ^
```

But it is not obvious what it means, it is even worse with type alias like:
```
template<typename X>
using t = X;

struct C : t<int> { };
```

At least with a dependent name, GCC provides a decent error message.
That is:
```
template<typename X>
using t = X;
template <typename X>
struct C : t<X> { };
C<int> a;
```
Gives:
```
<source>: In instantiation of 'struct C<int>':
<source>:5:8:   required from here
    5 | C<int> a;
      |        ^
<source>:4:8: error: base type 't<int>' {aka 'int'} fails to be a struct or
class type
    4 | struct C : t<X> { };
      |        ^
```

Reply via email to