Why this code is not valid?
auto f() {
if (true) return 0;
return {};
}
After parsing 0
, I think gcc should know that the return type of function f
was int
, but it still interpret the {}
as the initializer_list
when parsing the final return clause, why?
From function#Return_type_deduction
if there are multiple return statements, they must all deduce to the same type
and
If the return statement uses a brace-init-list, deduction is not allowed:
Which prohibit such construct.
Once a return statement has been seen in a function, the return type deduced from that statement can be used in the rest of the function, including in other return statements.
only allows to reuse the function recursively.