also noticed that it loops infinitely if the needle is empty, but the only meaningful thing to do here is to assert it being not empty as a precondition. You could maybe split character by character in that case, however that would be inconsistent with the overall behaviour of this split, as it does not ignore consecutive separators (it's a feature not a bug) and there are infinity consecutive empty strings between any two characters, or at the beginning of any string. You could also detect it and return some sentinel value, but to me that's an optional accessory that should go outside the main algorithm, because it can.
@namark just a guess but assuming the seperator is a multi-character value and not a single or two letter value then it will ignore the content in the middle of the seperator and misidentify seperators.
@freemo nah, std::search takes care of that, it works with ranges that you specify using begin and end iterators/pointers, a very c++ thing. The split itself works fine and handles all the edge cases, it just has undefined behaviour, which you can't identify in any way other than sheer unbridled pedantry.
@namark hmmm...
hint
the recovery http://ix.io/3n94/cpp