From N3337 [basic.lookup.unqual]/7:
A name used in the definition of a class X outside of a member function body or nested class definition shall be declared in one of the following ways:
- before its use in class X or be a member of a base class of X, or...
Because the trailing return type is part of the function declaration rather than the definition, it can't look ahead to see what else is declared in the class, so you need to declare that member above the function declaration.