When you need big integers in C++ you know you can turn to any mature library available online. If that isn't good enough, you can put something together using vectors and other STL goodies.
But if you ever need to find the factorial of 30 in the non-standard Borland TC 2 compiler, then you need...
the bignum<int> template !
The need for this arose because most of the code I wrote in school was for the TC 2 compiler. It uses a different template system, non-standard headers and matches function prototypes differently than GCC. It is also very relaxed about how you use const references. It invariably takes work to port the simplest programs to GCC, so anytime I had to reuse my old TC 2 code this template let me do any useful computation. I've used it many times to work with large numbers - computing factorials, testing primality (Rabin-Miller algorithm) and finding GCDs.
It supports overloaded arithmetic operators (+ - * / ++ --), bitwise operators (& | ~ ^ >> <<), iostream I/O (>> <<), all the relational operators and a function to return a boolean value. While + and - are O(n), * and / are O(n^2) for n-byte integers. The code cannot be moved to GCC since it makes assumptions like sizeof(unsigned) being 2 bytes.
When I do eventually rewrite it, I'll probably build it around a vector<type> and let the bignum object manage it's own size dynamically. Moving from a 32 to 64-bit base type would be as simple as :%s/uint32_t/uint64_t/g