当使用 auto 并提交到特定类型时,复制省略的确切规则是什么?(请参阅:GotW - 几乎总是自动)。
据我了解,移动/复制构造函数必须是可访问的,即使它不常用。但是,在下面的示例中, unique_ptr和fstream之间有什么区别?(与noexcept 有关?)
#include <memory>
#include <fstream>
int main()
{
auto f = std::fstream{"foo.bar"};
auto i = std::unique_ptr<int>{new int};
return 0;
}
// main.cc:6:10: error: call to implicitly-deleted copy constructor of 'std::basic_fstream<char>'
// auto f = std::fstream{"foo.bar"};
// ^ ~~~~~~~~~~~~~~~~~~~~