public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/55002] New: trailing return type is rejected in function signature @ 2012-10-20 19:01 leonid at volnitsky dot com 2012-10-20 19:20 ` [Bug c++/55002] " leonid at volnitsky dot com ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: leonid at volnitsky dot com @ 2012-10-20 19:01 UTC (permalink / raw) To: gcc-bugs 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. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55002] trailing return type is rejected in function signature 2012-10-20 19:01 [Bug c++/55002] New: trailing return type is rejected in function signature leonid at volnitsky dot com @ 2012-10-20 19:20 ` leonid at volnitsky dot com 2012-10-20 20:24 ` daniel.kruegler at googlemail dot com 2012-10-20 22:56 ` paolo.carlini at oracle dot com 2 siblings, 0 replies; 4+ messages in thread From: leonid at volnitsky dot com @ 2012-10-20 19:20 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55002 --- Comment #1 from Leonid Volnitsky <leonid at volnitsky dot com> 2012-10-20 19:20:00 UTC --- I've probably overcomplicated my example. Simpler test case: ---------------------------------- int f(auto (*ff) -> int (int) ) { return ff(1); } ---------------------------------- ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55002] trailing return type is rejected in function signature 2012-10-20 19:01 [Bug c++/55002] New: trailing return type is rejected in function signature leonid at volnitsky dot com 2012-10-20 19:20 ` [Bug c++/55002] " leonid at volnitsky dot com @ 2012-10-20 20:24 ` daniel.kruegler at googlemail dot com 2012-10-20 22:56 ` paolo.carlini at oracle dot com 2 siblings, 0 replies; 4+ messages in thread From: daniel.kruegler at googlemail dot com @ 2012-10-20 20:24 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55002 Daniel Krügler <daniel.kruegler at googlemail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |daniel.kruegler at | |googlemail dot com --- Comment #2 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-10-20 20:24:19 UTC --- Your issue looks invalid to me, because you are never providing a pointer to function declarator. Lets look first at your simplified example: auto (*ff) -> int (int) This would be an invalid function declarator, because there is (a) no parameter list and (b) the return type is a function type int(int), which is never possible. I can only assume you mean int f(auto (*ff)(int) -> int) { return ff(1); } and this is accepted. A similar defect is in your original code, where the only valid form would be template<class T, size_t N> size_t apply (const T (&A)[N], auto (*f)(const T (&)[N]) -> size_t) { return f(A); } which is also accepted. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55002] trailing return type is rejected in function signature 2012-10-20 19:01 [Bug c++/55002] New: trailing return type is rejected in function signature leonid at volnitsky dot com 2012-10-20 19:20 ` [Bug c++/55002] " leonid at volnitsky dot com 2012-10-20 20:24 ` daniel.kruegler at googlemail dot com @ 2012-10-20 22:56 ` paolo.carlini at oracle dot com 2 siblings, 0 replies; 4+ messages in thread From: paolo.carlini at oracle dot com @ 2012-10-20 22:56 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55002 Paolo Carlini <paolo.carlini at oracle dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID --- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-10-20 22:55:59 UTC --- Closing. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-10-20 22:56 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-10-20 19:01 [Bug c++/55002] New: trailing return type is rejected in function signature leonid at volnitsky dot com 2012-10-20 19:20 ` [Bug c++/55002] " leonid at volnitsky dot com 2012-10-20 20:24 ` daniel.kruegler at googlemail dot com 2012-10-20 22:56 ` paolo.carlini at oracle dot com
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).