Как мне объявить функцию, тип возвращаемого значения которой выводится?

Учти этоC ++ 1y код (Живой пример):

#include 

auto foo();

int main() {
    std::cout < foo();   // ERROR!
}

auto foo() {
    return 1234;
}

Ответы на вопрос(1)

Ваш ответ на вопрос