c ++ std :: regex, smatch retém subexpressões apenas uma vez para sua aparência em uma sequência padrão

Eu tenho o seguinte 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;
    }

Tudo funciona bem, exceto que "smatch sm" possui apenas uma substring para cada subexpressão especificada na cadeia de expressão regular. Por exemplo, para a seguinte sequência de teste:

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

que corresponde corretamente ao

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

expressão regular, o "sm" possui apenas substrings de árvore: um é para toda a cadeia e os outros dois são "(A, B)" e "(R, M)", o "(C, D)", " (F, W) "," (G, K) "estão ausentes, mas são correspondentes.

Parece que o(?:\s(\([A-Z],[A-Z]\)))* é entendido corretamente pelo regex que 0 ou mais das subexpressões devem ser correspondidas, mas parece haver um erro que apenas uma subexpressão é armazenada nostd::smatch sm.
É um erro de biblioteca (que é menos provável) ou estou fazendo algo errado? Sua ajuda e conselhos são bem-vindos!

questionAnswers(1)

yourAnswerToTheQuestion