Из Введение в функцию С++ 11: возврат возвращаемых типов
В статье утверждается, что
template <class T> class tmp {
public:
int i;
};
auto foo()->auto(*)()->tmp<int>(*)(){
return 0;
}
эквивалентно
template <class T> class tmp{
public:
int i;
};
tmp<int> (*(*foo())())() {
return 0;
}
Я не понимаю сложную функцию во втором примере кода. Где я должен смотреть вначале? Я думаю, это foo
. Но stat рядом с foo
будет определять foo
как указатель...
Основываясь на первом примере кода, я преобразую фрагмент как
tmp<int> (*)() (*)() foo(){ return 0;}
Итак, foo - это функция, которая возвращает 0, но возвращаемый тип является сложным: его тип возврата - это функциональный указатель, возвращаемый тип которого снова является указателем функции, тип возврата которого tmp<int>
.