В 5.1.1/3 стандарта С++ [expr.prim.general]
В отличие от выражения объекта в других контекстах *, это не обязательно для полного типа для целей доступа членов класса вне тела функции-члена. Только участники, объявленные ранее к декларации видны.
И вот этот пример:
struct A {
char g();
template<class T> auto f(T t) -> decltype(t + g())
{ return t + g(); }
};
template auto A::f(int t) -> decltype(t + g());
Можете ли вы объяснить цитату и пример? Что именно демонстрируется здесь?