Wystarczy poszukać po necie błędu: http://stackoverflow.com/questions/20749951/how-do-i-deduce-auto-before-a-function-is-called
Lecz po krótce. Nie jest to możliwe, aby stworzyć prototyp funkcji z auto, a później dać jej ciało (tak samo jak z constexpr i po części z inline). A dlaczego? Podobny scenariusz jest ze zmiennymi:
auto N = 0u; // działa, kompilator może przeprowadzić dedukcję
auto N;
N = 0u; // błąd, brak dedukcji już we wcześniejszej linii
Zauważ, że jeśli chodzi o funkcję (jak i zmienne extern) ich deklaracja i definicja mogą znajdować się w dwóch osobnych plikach, a model kompilacji C++ nie pozwala na latanie po wszystkich plikach i sprawdzanie gdzie co jest.
Z auto jest jak z szablonami, kompilator w trakcie kompilacji musi stworzyć nową funkcję na podstawie szablonu, a nie zrobi tego bez jej ciała.