boost make_shared toma una referencia constante. ¿Alguna forma de evitar esto?

Estoy utilizando punteros compartidos de refuerzo en mi programa y tengo una clase que toma como parámetros una referencia a otro objeto. El problema que estoy encontrando es que la función make_shared requiere que todos los parámetros sean una referencia constante, y recibo errores de compilación si el constructor de mi clase no permite que se pasen los parámetros de referencia const.

¿Alguien sabe la razón detrás de esto? Además, ¿hay algo que pueda hacer para solucionar esto?

Ejemplo de código de lo que me está dando problemas:

class Object
{
  public:
    Object(int& i)
    {
      i = 2;
    }
};


int main(int argc, char *argv[])
{
  int i = 0;
  boost::shared_ptr<Object> obj = boost::make_shared<Object>(i);
  return 1;
}

Esto resulta en un error de compilación que indica lo siguiente

: make_shared.hpp: 185: error: no hay función coincidente para llamar a `Object :: Object (const int &) 'nota: los candidatos son: Object :: Object (const Object &) note: Object :: Object (int &)

Si el parámetro del constructor Objetos es una constante, esto funciona. Tengo curiosidad por saber por qué make_shared se comporta de esta manera.

Respuestas a la pregunta(6)

Su respuesta a la pregunta