Двойное удаление в initializer_list против 2013

Сегодня я столкнулся с проблемой памяти в моем проекте с классом, использующим c ++ 11 initializer_list. Система сообщает о проблеме с памятью: «Выражение _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse) в dbgdel.cpp. Я упростил код до простого примера, он больше не выдает выражение, но проблема становится очевидной из результатов отладки. В моих глазах это код правильный, также, похоже, работает с g ++.

#include <functional>
#include <memory>
#include <string>
#include <iostream>
#include <vector>
#include <map>
#include <sstream>

#include <initializer_list>

using namespace std;

class B {
public:
    char data[256];
    B(const string& x) {
        cout << "Init " << this << endl;
    }
    B(const B& b) {
        cout << "Copy " << this << endl;
    }
    ~B() {
        cout << "Deleting b " << this << endl;
    }
};

class C {
public:
    vector<B> bs;

    C(initializer_list<B> bb) {
        for(auto& b : bb) {
            bs.push_back(b);
        }
    }
};

int main(int argc, char** argv) {
    C bb { B("foo"), B("bar") };
    return 0;
}

Выход:

Init 00B7FAE8
Init 00B7FBE8
Copy 00E108A0
Copy 00E10AE8 (?????)
Deleting b 00E108A0
Copy 00E10BE8
Deleting b 00B7FBE8
Deleting b 00B7FAE8
Deleting b 00B7FAE8  (Deleted twice!)

Какую ошибку я делаю здесь или это не должно работать?

Ответы на вопрос(1)

Ваш ответ на вопрос