cómo usar next_permutation

Estoy tratando de conseguir un arreglo de tablas de tres en raya. Así que tengo el siguiente código:

// 5 turns for x if x goes first
std::string moves = "xxxxxoooo";

do {
    std::cout << moves << std::endl;
} while ( std::next_permutation(moves.begin(), moves.end()) );

Pero solo saca la cadena original una vez. Supongo que cada personaje tiene que ser único. ¿De qué manera puedo hacer esto?