#include <iostream>
using namespace std;
#include <tuple>
#include <string>
template <typename Functor, typename Arg>
decltype(auto) call(Functor f, Arg &&arg) { // (1)
std::cout << "Base case" << std::endl;
}
template <typename Functor, typename... Args>
decltype(auto) call(Functor f, std::tuple<Args...> &&args) {
std::cout << "TTT" << std::endl;
}
int main() {
call(1,std::tuple<int>{1});
call(1,2);
std::tuple<int> ti{5};
call(1,ti);
call(1,std::move(ti));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8c3RyaW5nPgoKdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lIEFyZz4KZGVjbHR5cGUoYXV0bykgY2FsbChGdW5jdG9yIGYsIEFyZyAmJmFyZykgeyAvLyAoMSkKICAgIHN0ZDo6Y291dCA8PCAiQmFzZSBjYXNlIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmdzPgpkZWNsdHlwZShhdXRvKSBjYWxsKEZ1bmN0b3IgZiwgc3RkOjp0dXBsZTxBcmdzLi4uPiAmJmFyZ3MpIHsgCiAgICBzdGQ6OmNvdXQgPDwgIlRUVCIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKIAogICBjYWxsKDEsc3RkOjp0dXBsZTxpbnQ+ezF9KTsKICAgY2FsbCgxLDIpOwoKICAgc3RkOjp0dXBsZTxpbnQ+IHRpezV9OwogICBjYWxsKDEsdGkpOwogICBjYWxsKDEsc3RkOjptb3ZlKHRpKSk7CgoKfQ==