Listing 1: vector erasure

#include <stdio.h>
#include <vector>
using namespace std;

bool tracing = false;

class X
    {
public:
    X(int value) : value(value)
        {
        }
    X &operator=(X const &that)
        {
        if (tracing)
            printf(“assign %d over %d\n”, that.value, value);
        value = that.value;
        return *this;
        }
    ~X()
        {
        if (tracing)
            printf(“destruct %d\n”, value);
        }
private:
    int value;
    };

int main()
    {
    vector<X> c;
    c.push_back(1);
    c.push_back(2);
    c.push_back(3);
    printf(“during erase...\n”);
    tracing = true;
    c.erase(c.begin());
    printf(“\nduring container destruction...\n”);
    }
— End of Listing —