Regex C ++ corresponde ao conteúdo entre chaves [duplicado]

Esta pergunta já tem uma resposta aqui:

O gcc 4.8 ou anterior é um buggy sobre expressões regulares? 3 respostas

Suponha que eu gostaria de extrair o conteúdo de chaves combinadas usando regex C ++ 11. Então, por exemplo,{foo} corresponderia com sucesso e eu poderia usar omatch_result para extrair o conteúdo. Parece simples, mas o código a seguir não faz exatamente o que eu desejo

std::string foo("{foo}");
std::regex r("\\{(.*)\\}");
std::smatch m;
bool result = regex_match(foo, m, r); // result returns true

cout << m[0] << endl; // prints: {foo}
cout << m[1] << endl; // prints: {foo} instead of just foo as I would expect

Agora não deveriam[1] retornar apenasfoo sem o aparelho, pois é o primeiro grupo de captura?

EDITAR Uma informação essencial para esta pergunta é que o compilador que estou usando é o GCC 4.6.3 (que atualmente é a versão mais recente do repositório no Ubuntu 12.04 LTS). A resposta identifica com precisão o quão ruim é o suporte para regex no GCC.

questionAnswers(1)

yourAnswerToTheQuestion