Ah yes, C++11 introduces more ways to break the preprocessor!
Making them variadic might be sufficient to workaround that. I had half a mind to reserve the use of variadics here for annotations, but you're right - it's a pain that could, potentially, be avoided. I'll certainly consider it (but, note, I'm not actively working on it for a few weeks as I prepare for some conferences).
To answer your immediate question: it's certainly not as strict as the std namespace, and for adding specialisations for your own types it's the only way.
Here, though, you're using std::vector. Catch already has specialisations for std::vector (but on toString() - or more specifically StringMaker - rather than operator<<). Catch generally only falls back to ostream's operator<< if it can't find a toString/ StringMaker specialisation. So in what context are you seeing a need for this specific example?
In other cases you should specialise Catch::toString (for simple types) or, if you need partial specialisation (as for vector<T>) Catch::StringMaker.
HTH