atribuição de classe com membro const

Considere o seguinte código:

struct s
{
    const int id;

    s(int _id):
        id(_id)
    {}
};
// ...
vector<s> v;  v.push_back(s(1));

Eu recebo um erro do compilador que 'const int id' não pode usar o operador de atribuição padrão.

Q1 Por que o push_back () precisa de um operador de atribuição?
A1 Porque o atual padrão c ++ diz isso.

Q2 O que devo fazer?

Eu não quero desistir do especificador constEu quero que os dados sejam copiados

 A2 Eu vou usar ponteiros inteligentes.

Q3 Eu criei uma "solução", que parece um tanto insana:

s& operator =(const s& m)
{
    if(this == &m) return *this;
    this->~s();
    return *new(this) s(m);
}

Devo evitar isso e por que (em caso afirmativo)?É seguro usar o posicionamento novo se o objeto estiver na pilha?

questionAnswers(7)

yourAnswerToTheQuestion