It doesn't feel like reinventing the wheel that much (perhaps even a more specific function all_equal, since the call to all turned out to be quite complicated in this case). You can base the implementation of that on C++ algorithms.
While I very much appreciate the power of C++ algorithms, they are very generic which means that if you read the code, it may not be quite obvious what it is supposed to achieve. For this reason I tend to wrap even single calls to some algorithm in a separate function (where I unleash all the powers of boost function objects :))