Move assignment operator of smart pointers does make copy
Example:
Pango::FontDescription src;
printf("src gobj %p\n", src.gobj());
Pango::FontDescription dst;
dst = move(src);
printf("after move\n");
printf("src gobj %p\n", src.gobj());
printf("dst gobj %p\n", dst.gobj());
Output:
src gobj 0x108012b20
after move
src gobj 0x108012b20
dst gobj 0x108013070
It created new copy of object and left source as is. Output of first example should be same as in this second case with move constructor:
Pango::FontDescription src;
printf("src gobj %p\n", src.gobj());
Pango::FontDescription dst(move(src));
printf("after move\n");
printf("src gobj %p\n", src.gobj());
printf("dst gobj %p\n", dst.gobj());
src gobj 0x10600c260
after move
src gobj 0x0
dst gobj 0x10600c260