Llamada al constructor de copia suprimido implícitamente en LLVM

De acuerdo con las reglas de C ++ 11, 6 cosas (constructor predeterminado, constructor de copia, constructor de movimiento, asignación de copia, asignación de movimiento y destructor) se generan de forma predeterminada. Por la segunda regla, cuando se define cualquier copia, movimiento o destructor personalizados, no se generan esas operaciones predeterminadas. Pero en mi código que sigue ese no es el caso. Pero este código no se compila con un error.

call to implicitly deleted copy constructor of 'Uni'

Cuando escribo mi propio constructor de copia para Uni, todo funciona bien. (Se comenta en el código, dado como referencia).

Cualquier pensamiento muy apreciado.

Finalmente, estoy ejecutando esto en Mac, Xcode con el compilador LLVM.

muchas gracias...

#include <iostream>

class A
{
public:
    A(int i) :num{i}
    {
        std::clog<< "ctor  A() num = " << num << "\n";

    }
    A( A const &aRef)
    :num{aRef.num}
    {
        std::clog << " copy ctor A( A const &aRef) num = " << num << "\n";
    }

    int value()
    {
        return num;
    }

private:
    int num;

};
class Uni
{

public:
    Uni(A* aptr) : up{aptr}
    {
        std::clog << " ctor Uni value = " << up.get()->value() << "\n";
    }
    /*Uni(Uni const &uRef)
    {
        std::clog << " copy ctor Uni copying obj pointed by unique_ptr\n";
        up.reset(uRef.up.get() ? new A{*uRef.up.get()} : nullptr);
    }*/
private:
    std::unique_ptr<A> up;

};

int main(int argc, const char * argv[])
{
    Uni one{new A{10}};
    Uni two{one}; //default copy ctor is implicitly deleted. why ?
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta