This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/55002] New: trailing return type is rejected in function signature
- From: "leonid at volnitsky dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sat, 20 Oct 2012 19:00:56 +0000
- Subject: [Bug c++/55002] New: trailing return type is rejected in function signature
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55002
Bug #: 55002
Summary: trailing return type is rejected in function signature
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: leonid@volnitsky.com
7.1.6.4 auto specifier [dcl.spec.auto]
note 2: The auto type-specifier may appear with a function declarator
with a trailing-return-type (8.3.5) in any context where such a
declarator is valid
Contrived example:
-------------------------------------------------------------
typedef unsigned long size_t;
// overload c-array
template<class T, size_t N>
size_t
size(T (&)[N]) { return N; }
// overload - c-string
template<size_t N>
size_t
size(char (&A)[N]) { size_t i=0; while(A[i++]); return i; }
// APPLY
// this works
template<class T, size_t N> size_t apply (const T (&A)[N], size_t (*f)
(const T (&)[N]))
// this rejected -- error: parameter declared âautoâ
//template<class T, size_t N> size_t apply (const T (&A)[N], auto (*f) ->
size_t (const T (&)[N]))
{ return f(A); };
int main() {
int A[2];
return apply(A, size);
}
------------------------------------------------------------------
Without trailing return type in signature it is impossible to write apply-like
function with can deduce function-type for overloaded functions.