https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123058
Bug ID: 123058
Summary: ICE (after error) for reduced parest snippet
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rdapp at gcc dot gnu.org
Target Milestone: ---
Target: x86 riscv
This cpp code
struct __detector;
template <typename, template typename> > using __detected_or __detector;
template <typename _Default, template typename>
_Op > using __detected_or_t typename __detected_or<_Default, _Op>::type;
template <typename> struct pointer_traits;
template <typename _Tp> using __pointer _Tp;
template <typename _Alloc> struct allocator_traits {
using pointer = __detected_or_t<_Alloc, __pointer>;
pointer_traits<pointer>
ICEs:
<source>:2:30: error: expected '<' before 'typename'
2 | template <typename, template typename> > using __detected_or
__detector;
| ^~~~~~~~
<source>:2:40: error: expected 'class' or 'typename' before '>' token
2 | template <typename, template typename> > using __detected_or
__detector;
| ^
<source>:2:62: error: expected '=' before '__detector'
2 | template <typename, template typename> > using __detected_or
__detector;
| ^~~~~~~~~~
<source>:3:39: error: expected '<' before 'typename'
3 | template <typename _Default, template typename>
| ^~~~~~~~
<source>:4:5: error: expected 'class' or 'typename' before '_Op'
4 | _Op > using __detected_or_t typename __detected_or<_Default,
_Op>::type;
| ^~~
<source>:4:33: error: expected '=' before 'typename'
4 | _Op > using __detected_or_t typename __detected_or<_Default,
_Op>::type;
| ^~~~~~~~
<source>:6:41: error: expected '=' before '_Tp'
6 | template <typename _Tp> using __pointer _Tp;
| ^~~
<source>:9:25: internal compiler error: in resolve_typename_type, at
cp/pt.cc:30272
9 | pointer_traits<pointer>
| ^
I ran into it when reducing another SPEC parest issue on riscv.