Templated Tokenizer Functions
The code generally looks good to me.  It is clear, complete and working.  The naming and formatting are clear and consistent (although I prefer to read code that does not have the space before each statement-terminating semicolon) but I did see a few things that may help you improve your code.

Consider using {} style initializers

There are a few places where  a Token is constructed, such as this:

Token token (current, next_) ;


However, this might be misconstrued as a function call. Assuming that you're using C++11 or better, it may be worth considering using the {} style for the constructor:

Token token {current, next} ;


This can't be misconstrued as a function call and may be slightly less ambiguous.

Consider alternative usage

The code works well for the use cases you've said you're interested in addressing.  That's good, and it may be all you ever need, but when I first saw the code, I thought it might be useful to be able to use it like this:

std::string const s2 = "55,33,1,7,42";
auto const t4 = BackInsertTokenize &lt;std::vector &lt;int&gt;&gt; (s2, ',') ;


The intent was to create a vector of integers from the const string, but this code doesn't actually compile.  The problem is essentially this line:

*out++ = Token (current, next) ;


That works fine for any Token type that can be constructed from an iterator range like this, but not for a primitive type like int.  One way to address that might be to provide another template that additionally takes an operator to explicitly perform this conversion with the given types.

Omit return 0

When a C++ program reaches the end of main the compiler will automatically generate code to return 0, so there is no reason to put return 0; explicitly at the end of main.