MSVC需要带有向量和地图的显式默认移动构造函数

时间:2019-01-29 12:30:39

标签: c++ visual-c++ c++17

我在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构造函数或 vectorunordered_map被注释掉时,它确实会编译。注释掉emplace_back语句也可以“解决”该问题。有趣的是(http://coliru.stacked-crooked.com/a/a4e5590bd63c0de0),GCC或Clang不会发生此问题。

这是怎么回事?

0 个答案:

没有答案