How can automatic type deduction be used for class members? For example, the following code
auto foo(); // foo is defined in another file
error: function 'foo' with deduced return type cannot be used before it is defined
If you want to use return type deduction, you cannot separate the declaration and definition into different files (not unless everyone includes both). There's no workaround for this other than to use an actual type.
When C++ goes to compile code that calls
func, it must be able to know, at that time, what it will return. Without having definition in that translation unit, the compiler cannot know what will be returned. And therefore, the compiler cannot compile that code. And C++'s compilation model does not allow it to use information from other translation units in this way.
The best you might be able to do is wait for modules, which may be able to get around this.
Don't think of return type deduction as a way to never have to write return types. It's a feature intended for circumstances where the return type is awkward to detect, and those are typically in template code. If the return type is simple and obvious to you, there's really little reason not to put it there. Don't use return type deduction by default.