I cannot yet comment (getting started on the site) but added a more generic version of Jerry Coffin's fantastic ctype's derived class to his post.
Thanks Jerry for the super idea.
(Because it must be peer-reviewed, adding it here too temporarily)
struct SeparatorReader: std::ctype
{
template
SeparatorReader(const T &seps): std::ctype(get_table(seps), true) {}
template
std::ctype_base::mask const *get_table(const T &seps) {
auto &&rc = new std::ctype_base::mask[std::ctype::table_size]();
for(auto &&sep: seps)
rc[static_cast(sep)] = std::ctype_base::space;
return &rc[0];
}
};