c ++ std :: regex, smatch retiene las subexpresiones solo una vez por su aparición en una cadena de patrón

Tengo el siguiente código:

    int main()
    {
        regex reg_expr("(\\([A-Z],[A-Z]\\))(?:\\s(\\([A-Z],[A-Z]\\)))*");
        //regex reg_expr("(\\([A-Z],[A-Z]\\))(?:\\s(\\([A-Z],[A-Z]\\)))*\\s(\\([A-Z],[A-Z]\\))");
        smatch sm;
        string input("(A,B) (C,D) (F,W) (G,K) (R,M)");
        //string input("(A,B) (C,D) (F,W)");
        if (regex_match(input, sm, reg_expr)) {
            cout << "true\n";
            cout << sm.size() << "\n";
            for (int i = 0; i < sm.size(); i++) {
                //if (sm[i].length())
                    cout << "submatch number " << i << ": " << sm[i].str() << '\n';
            }
        } else
            cout << "false";
    return 0;
    }

Todo funciona bien, excepto que "smatch sm" tiene solo una subcadena para cada subexpresión especificada en la cadena de expresión regular. Por ejemplo, para la siguiente cadena de prueba:

 (A,B) (C,D) (F,W) (G,K) (R,M)

que coincide correctamente con el

 (\([A-Z],[A-Z]\))(?:\s(\([A-Z],[A-Z]\)))*

expresión regular, el "sm" solo tiene subcadenas de árbol: una es para toda la cadena y las otras dos son "(A, B)" y "(R, M)", el "(C, D)", " (F, W) "," (G, K) "faltan pero coinciden.

Parece que el(?:\s(\([A-Z],[A-Z]\)))* regex entiende correctamente que 0 o más de las subexpresiones deben coincidir, pero parece haber un error de que solo se almacena una subexpresión en elstd::smatch sm.
¿Es un error de biblioteca (que es menos probable) o estoy haciendo algo mal? ¡Su ayuda y consejo son bienvenidos!

Respuestas a la pregunta(1)

Su respuesta a la pregunta