这段示例代码是否能够编译通过?
clang
和 g++
可以编译通过,而 icc 14
则会报错,指出在 auto t = ...
这一行中,std::unique_ptr
的复制构造函数未定义。
#include <iostream>
#include <memory>
#include <tuple>
std::tuple<std::unique_ptr<int[]>, int> foo()
{
std::unique_ptr<int[]> a;
unsigned int b;
auto t = std::make_tuple(std::move(a), b);
return std::move(t);
}
int main()
{
foo();
}
T
,而不是T&&
。我认为这样做应该是安全的。 - akappastd::move
的部分,因为它并不必要,并且会抑制 RVO。 - Benjamin Lindley