https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96103
Bug ID: 96103
Summary: Unclear diagnostic for a function return with
"decltype(auto)"
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: haoxintu at gmail dot com
Target Milestone: ---
Hi, all.
This code, "decltype(auto)" in return type is a c++14 extension and I guess GCC
might diagnose this better.
$cat test.cc
decltype(auto) foo () {}
$g++ -c -std=c++11 test.cc
test.cc:1:10: error: expected primary-expression before ‘auto’
1 | decltype(auto) foo () {}
| ^~~~
test.cc: In function ‘int foo()’:
test.cc:1:24: warning: no return statement in function returning non-void
[-Wreturn-type]
1 | decltype(auto) foo () {}
| ^
$g++ -c -std=c++14 test.cc
//emits nothing
While in Clang:
$clang++ -c -std=c++11 test.cc
test.cc:1:10: warning: 'decltype(auto)' type specifier is a C++14 extension
[-Wc++14-extensions]
decltype(auto) foo () {}
^
test.cc:1:1: error: deduced return types are a C++14 extension
decltype(auto) foo () {}
^
1 warning and 1 error generated.
I guess users can not fix the code according to the errors emitted until they
realized this is a C++14 extension.
Should GCC recognizes the C++14 extension first when parsing this code and then
emits the appropriate diagnostic information?
Thanks,
Haoxin