https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97773
Bug ID: 97773
Summary: gcc crash after some noexcept magic
Product: gcc
Version: 10.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: janezz55 at gmail dot com
Target Milestone: ---
clang version 10.0.1 compiles this, but gcc 10.2.0 fails gloriously:
template <typename ...T>
std::size_t hash_combine(T&& ...v) noexcept(noexcept(
((hash<std::remove_cvref_t<T>>()(std::declval<T>())), ...)))
{
auto seed{672807365};
(
(
seed ^= hash<std::remove_cvref_t<T>>()(std::forward<T>(v)) +
0x9e3779b9 + (seed << 6) + (seed >> 2)
),
...
);
return seed;
}
template <typename ...T>
struct hash<std::tuple<T...>>
{
auto operator()(std::tuple<T...> const& t) const
{
return std::apply(hash_combine<T const&...>, t);
}
};
internal compiler error: in type_throw_all_p, at cp/except.c:1292
Another bug, I'd like to report is: if I specify auto as the return type of
hash_combine(), then the compiler give this error:
error: no matching function for call to 'apply(<unresolved overloaded function
type>,
but clang compiles, again, without any errors.