On warnings: It's not worth my time to remove all warnings on all the compilers that are supported. In some cases (like with GCC) it is simply not possible to remove all warnings without making changes that are detrimental to the code. I aim for having no warnings on the main compilers that I develop on, which are current Microsoft Visual C++ 6.0 and .NET.
As far as difficulty understanding the code, I have to trade off ease of understanding the code with other priorities like minimizing code size, supporting new algorithms, ease of use, ease of implementation and maintenance. Without using generics, it would be impossible for me to support the range of algorithms that are available. If you are having trouble understanding the code and you think you'll never need more than one or two of the most popular algorithms, other libraries may very well be more suitable for you.
