vector <bool> :: operator [] mau comportamento? [duplicado]

Duplicata Possível:
Por que o vetor <bool> :: reference não retorna referência ao bool?

Eu costumava pensar que comstd::vector::operator[] Nós temosprofundo cópias do item acessado, mas parece que nem sempre é verdade. Pelo menos comvector<bool> o seguinte código de teste fornece um resultado diferente:

#include <iostream>
#include <vector>
using namespace std;

template <typename T>
void Test(const T& oldValue, const T& newValue, const char* message)
{
    cout << message << '\n';

    vector<T> v;
    v.push_back(oldValue);
    cout << " before:  v[0] = " << v[0] << '\n';

    // Should be a deep-copy (?)       
    auto x = v[0];   
    x = newValue;

    cout << " after:   v[0] = " << v[0] << '\n';
    cout << "-------------------------------\n";
}

int main()
{
    Test<int>(10, 20, "Testing vector<int>");
    Test<double>(3.14, 6.28, "Testing vector<double>");
    Test<bool>(true, false, "Testing vector<bool>");
}

Saída (código-fonte compilado com VC10 / VS2010 SP1):

Testing vector<int>
 before:  v[0] = 10
 after:   v[0] = 10
-------------------------------
Testing vector<double>
 before:  v[0] = 3.14
 after:   v[0] = 3.14
-------------------------------
Testing vector<bool>
 before:  v[0] = 1
 after:   v[0] = 0
-------------------------------

Eu teria esperado quev[0] depois de ax = newValue atribuição ainda seria igual ao seu valor anterior, mas isso não parece verdade. Por que é que? Por que évector<bool> especial?

questionAnswers(3)

yourAnswerToTheQuestion