以下代码在 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谢谢