O std :: string sempre será terminado por caractere nulo em C ++ 11?

Em um post de 2008 em seu site, Herb Sutter afirma o seguinte:

Há uma proposta ativa para reforçar isso ainda mais em C ++ 0x e exigir a terminação nula e, possivelmente, proibir implementações de cópia na gravação, por motivos relacionados à simultaneidade. Aqui está o documento: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html . Eu acho que uma ou ambas as propostas neste artigo provavelmente serão adotadas, mas veremos na próxima reunião ou duas.

Eu sei que o C ++ 11 agora garante que o conteúdo do std :: string seja armazenado de forma contígua, mas eles adotaram o acima no rascunho final?

Agora será seguro usar algo como &str[0] ?

Sim. De acordo com o C ++ 0x FDIS 21.4.7.1/1, std::basic_string::c_str() deve retornar

um ponteiro p tal que p + i == &operator[](i) para cada i em [0,size()] .

Isso significa que, dada uma string s , o ponteiro retornado por s.c_str() deve ser o mesmo que o endereço do caractere inicial na string ( &s[0] ).