小编bek*_*orn的帖子

对于此 MSVC 特定向量 <unordered_map<Trivial, NonCopyable>> 错误有任何解决方法吗?

以下代码在 MSVC 上确实失败,但在 GCC 和 Clang、godbolt上编译

#include <unordered_map>
#include <vector>
using namespace std;

struct NonCopyable
{
    NonCopyable() = default;
    NonCopyable(NonCopyable const &) = delete;
    NonCopyable(NonCopyable &&) = default;
};

int main()
{
    using Data = unordered_map<int, NonCopyable>;

    vector<Data> vec;

    vec.reserve(3);     // error
    vec.resize(3);      // error
    vec.emplace_back(); // error

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我在做项目时偶然发现的案例的简化版本。我从一开始就使用 MSVC,所以我更喜欢一种解决方法(如果可能的话)而不是更改编译器。

据我从错误消息中了解到,vector尝试复制构造一个pair<Trivial, NonCopyable>. 哪个,,它不应该,,,但我知道没有办法告诉它不要这样做:/

  • Data = map<int, NonCopyable>MSVC 因相同的错误而失败时,而其他人则编译。
  • 如果我使用,所有编译器都很好Data = pair<int, NonCopyable>;,因此尝试复制构造一对的容器可能是 unorderd_map
  • 如果我构建具有正确大小的向量,它就会起作用。但是,就我而言,我不能这样做。

谢谢

c++ move stdvector

13
推荐指数
1
解决办法
217
查看次数

标签 统计

c++ ×1

move ×1

stdvector ×1