Я использовал, чтобы не использовать std::move
при возврате std::unique_ptr
, потому что это запрещает RVO. У меня есть этот случай, когда у меня есть локальный std::unique_ptr
, но возвращаемый тип - std::shared_ptr
.
Здесь образец кода:
shared_ptr<int> getInt1() {
auto i = make_unique<int>();
*i = 1;
return i;
}
shared_ptr<int> getInt2() {
return make_unique<int>(2);
}
unique_ptr<int> getInt3() {
auto ptr = make_unique<int>(2);
return ptr;
}
int main() {
cout << *getInt1() << endl << *getInt2() << *getInt3() << endl;
return 0;
}
GCC принимает оба случая, но Кланг отказывается от getInt1()
С помощью этой ошибки:
main.cpp:10:13: error: no viable conversion from 'std::unique_ptr<int, std::default_delete<int> >' to 'shared_ptr<int>'
return i;
^
Здесь оба случая на coliru: GCC, Clang
Оба компилятора принимают третий случай.
Какая ошибка? Спасибо.