https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102651
Bug ID: 102651
Summary: typeid(X**) instantiates X
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: pdimov at gmail dot com
Target Milestone: ---
Using f.ex. `typeid(std:pair<void, void>**)` tries to instantiate
`std::pair<int, int>` and fails: https://godbolt.org/z/GhbYe3P8j
(One asterisk should be enough, but doesn't work either.)
The example without pair is
```
#include <typeinfo>
template <typename T>
struct S{
T x;
};
void foo()
{
typeid( S<void>** );
}
```
https://godbolt.org/z/nG3Kr3Te7
Interestingly, if `S` is incomplete, it works:
```
#include <typeinfo>
template <typename T>
struct S;
void foo()
{
typeid( S<void>** );
}
```
https://godbolt.org/z/nK8b5n1qn