Use ADL begin/end
Store a T& instead of a T*
Print error messages directly to std::cerr
Early exit on first error
Remove the word-wrapping in the help message