Akurat to [jak i nieokreślona ilość argumentów] było już w c o ile mnie pamięć nie myli. Natomiast template, [dzięki] jak najbardziej są w C++ i można i należy ćwiczyć i używać i nawet na SPOJ’u
Jeżeli dla kogoś kluczowe jest uzyskanie AC [też tak miałem do niedawna i jeszcze co nieco z tego pozostało we mnie] to w tym wątku nie ma dla niego nic ciekawego i kluczowego
.
Rzeczywiście czytelna, krótka, bardzo ciekawa i oczywiście, sorry @j4rooo, ale nie działająca. Powinieneś nie dołączać includa, a pozostawić czytelnikowi roztrzygnięcie czego brakuje i co musi dodać
Może dobrym pomysłem, jest umieszczanie tu tylko samej “gołej” funkcji i link do ideone z działającym przykładem? W kawałku który zamieściłeś zabrakło inkludów i using namespace … lub użycie wszędzie gdzie trzeba przedrostka
std:: a najlepiej jak proponowałem wyżej [link do ideone].
Z jednej strony twój kawełek kodu to mała perełka, bo początkujący będzie [może] zastanawiał się jak to możliwe, że wewnątrz funkcji użyłeś tej samej nazwy [reverse]. Początkujący koder pomyśli [może], to przecież rekurencja
Doświadczony user pomyśli, geniusz, wykorzystał przeciążanie funkcji. 
BTW
Zaznaczyłeś, że ten kawałek kodu to C++11, ale …
C++11 to już lamus
niedługo będzie C++17
użyłeś stoi, i ograniczyłeś się tylko do typu int a zobacz na stronie: http://www.cplusplus.com/reference/string/stoi/ są jeszcze funkcje strtol i strlul, i zamiast int a może lepiej użyć szablonu - ale …
BTW
s.begin(), s.end() to może jeszcze nie lamus, ale źródła [np Clean C++ … 17 --> https://www.amazon.com/Clean-Sustainable-Software-Development-Practices/dp/1484227921] zalecają używać w poniższym wypadku:
reverse (begin(s), end(s));
zamiast
reverse(s.begin(), s.end());
Ale wszystko się dewaluje i powoli przechodzi do lamusa. Wystarczy pobawiś się kodami ze strony Rafała Nowaka [wiki] i okaże się że paru już się nie da skompilować, trzeba wprowadzić bardzo drobne poprawki. Podobnie z kodami naszego guru, Stańczyka. Tam też już jakiś czas temu, aby skompilować jakiś kawałek kodu, musiałem się trochę nagłówkować i coś tam poprawić.
No i @tarpauwatratar, zamiast, jak ostatnio gdzieś napisałeś:
#define LL long long
lepiej użyj
typedef long long LL;

#define to makra i polecenia preprocesora - pozostałość [spuścizna] po C, a chyba wiesz [pisałem na starym forum] co o tym myślę i oczywiście wszelkie źródła, chociażby w/w? 
PS
Możes stwierdzić, że po prostu zamienisz
int reverse (int a) { …
na
unsigned long long (unsigned long long a) { …
proszę bardzo
ale tu nie o to chodzi.