https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94117
Bug ID: 94117
Summary: non-dependent expr treated as-if dependent
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nathan at gcc dot gnu.org
Target Milestone: ---
Created attachment 48006
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48006&action=edit
distilled from ranges
We accept the attached test case, which should be rejected.
It comes from these two fragments of the ranges header:
lines ~1595
static constexpr decltype(auto)
__iter_move(const _Iterator& __i = {})
noexcept(noexcept(std::__invoke(*__i._M_parent->_M_fun,
*__i._M_current)))
{
if constexpr (is_lvalue_reference_v<decltype(*__i)>)
return std::move(*__i);
else
return *__i;
}
lines ~1752
friend constexpr decltype(auto)
iter_move(const _Iterator& __i) noexcept(noexcept(__iter_move()))
{ return __iter_move(__i); }
If we change __iter_move's argument type to int, we reject complaining that the
call in iter_move's noexcept spec requires the default argument before it's
been parsed. Clang rejects either way.
the '__iter_move ()' call is not dependent because it has no arguments.
Addition of the default argument does not make it dependent.
filing a separate issue to fix libstdc++