https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67910
Bug ID: 67910 Summary: Two autos in a single function confuses the type system Product: gcc Version: 5.2.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: guille at cal dot berkeley.edu Target Milestone: --- The following code does not compile on 5.2.0: struct A {}; struct B {}; static auto f(auto b) -> A { return A(); } int main() { A a = f(B()); return 0; } whereas the following *does* compile: struct A {}; struct B {}; static auto f(B b) -> A { return A(); } int main() { __attribute__((unused)) A a = f(B()); return 0; } In the first (failing) case, the type system thinks that 'f' returns the same type as the first auto *argument*, even though the return type is specified to be 'A'.