在N2812中是引言中的一个示例,其中 aunique_ptr
作为值参数给出
void push_back2(
std::list<std::unique_ptr<int>>& l, std::unique_ptr<int> a)
{
l.push_back(a); // oops: moves from the lvalue 'a', silently!
l.push_back(a); // oops: 'a' no longer has its original value
}
本文讨论了 RValue/LValue 重载解析的问题,但这不是我的意思。
我想知道,如果std::unique_ptr<int> a
按值提供参数不会导致编译器错误?它会复制它,对吗?这是不允许的unique_ptr
我知道这篇论文已经很老了,也许从那以后,它的定义unique_ptr
已经改变了。但也许这只是一个错字,作者想改写std::unique_ptr<int> &a
?
我的 gcc 4.7.0 同意我的观点,但这没有证据 :-)
void push_back2( std::list<std::unique_ptr<int>>&, std::unique_ptr<int> ) { };
int main() {
list<unique_ptr<int>> lst;
unique_ptr<int> num { new int{4} };
push_back2(lst, num); //ERR: use of deleted function
}