https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111484
Bug ID: 111484
Summary: bogus "error: inconsistent deduction for auto return
type" in if-constexpr branches
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
Given:
template<typename T>
auto foo()
{
using ref = T&;
if constexpr (__is_same(ref, ref))
return 1;
else
return 1L;
}
int main()
{
foo<void>();
}
The invalid type in the condition prevents both branches from being discarded,
and so we get two different types deduced for the return type:
ded.cc: In instantiation of 'auto foo() [with T = void]':
ded.cc:13:12: required from here
ded.cc:4:9: error: forming reference to void
4 | using ref = T&;
| ^~~
ded.cc:8:12: error: inconsistent deduction for auto return type: 'int' and then
'long int'
8 | return 1L;
| ^~
I don't know how easy (or worthwhile) it would be to suppress that second
error.