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

            Bug ID: 110031
           Summary: ICE: error reporting routines re-entered on non-type
                    template argument
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: stevenxia990430 at gmail dot com
  Target Milestone: ---

The following program produces internal compiler error: error reporting
routines re-entered. Checked on clang and it was rejected as invalid code.
Tested on gcc trunk. 


To quickly reproduce: https://gcc.godbolt.org/z/ex14EKeox
```
#include <type_traits>

#include <iostream>
template <typename T>
constexpr void print_type()
{
  std::cout << "Type: " << typeid(T).name();
}
template <typename T, std::enable_if_t<std::is_literal_type_v<std::decay_t<T>>,
int> = 0>
struct A {
  A(T &&)
  {
  }
};

template <typename T>
struct A<T> {
  A(T &&) = delete;
};

int main(void)
{
  A a{5.3};
  return 0;
}
```

Note, if we comment out the A a{5.3}; line in main function, gcc-trunk actually
accept this code (compiles) however it is rejected by clang. Might be related
to  this: bug109390

Reply via email to