https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93248
Bug ID: 93248 Summary: ICE in decltype of template constructor with default argument within a class template Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rene.r...@fu-berlin.de Target Milestone: --- Hi gcc team, I stumbled over the following weird scenario causing an ICE with gcc>=8.3 but seems to be fine for the gcc 7 series. Here is the code in question: ``` #include <vector> template <typename t> struct foo { template <typename some_t> constexpr foo(t const it, some_t const index, size_t const my_index = 0) : m_it{it}, m_index{index}, m_my_index{my_index} {} t m_it{}; size_t m_index{}; size_t m_my_index{}; }; int main() { using foo_t = decltype(foo{10, 4u, 2}); // works // using foo_ice_t = decltype(foo{10, 4u}); // ICE: type deduction in decltype seems to cause this? using foo_fine_t = decltype(foo<size_t>{10, 4u}); // explicit type declaration works fine. foo f{10, 3u}; // works fine out of decltype expression. } ``` The second decltype expression for foo_ice_t causes an ICE for gcc>=8.1 but not for gcc7.5. If I use the type deduction to create an object of foo everything works as expected. Can you help me with this? Many thanks in advance.