Почему это работает:
template <typename A>
struct S {
A a;
template <typename B>
auto f(B b) ->
decltype(a.f(b))
{
}
};
Но это не (a и f местами смены):
template <typename A>
struct S {
template <typename B>
auto f(B b) ->
decltype(a.f(b))
{
}
A a;
};
говоря, что a не объявляется в этой области (внутри decltype), но добавление явного this-> заставляет его работать.