我在MSVC中遇到了一个有趣的问题。以下代码无法与MSVC一起编译:
#include <vector>
#include <unordered_map>
#include <memory>
#include <string>
struct S {
explicit S(const std::string&);
// S(S&&) = default;
std::vector<std::unique_ptr<int>> v;
std::unordered_map<int, int> a;
std::string s;
};
std::vector<S> foo() {
std::vector<S> s;
s.emplace_back("hello");
s.emplace_back("world");
return s;
}
https://www.godbolt.ms/z/pQnKwD
但是,当提供默认的move构造函数或 vector
或unordered_map
被注释掉时,它确实会编译。注释掉emplace_back
语句也可以“解决”该问题。有趣的是(http://coliru.stacked-crooked.com/a/a4e5590bd63c0de0),GCC或Clang不会发生此问题。
这是怎么回事?