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: unassig...@gcc.gnu.org
        ReportedBy: leo...@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.

Reply via email to