Como combinar vários resultados usando std :: regex

por exemplo. Se eu tiver uma string como "primeiro segundo terceiro adiante" e desejar corresponder cada palavra em uma operação para produzi-las uma a uma.

Eu apenas pensei que "(\ b \ S * \ b) {0,}" funcionaria. Mas, na verdade, não funcionou.

O que devo fazer?

Aqui está o meu código:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    regex exp("(\\b\\S*\\b)");
    smatch res;
    string str = "first second third forth";
    regex_search(str, res, exp);
    cout << res[0] <<" "<<res[1]<<" "<<res[2]<<" "<<res[3]<< endl;
}   

Estou ansioso por sua ajuda. :)