为什么 std::move 定义在 <type_traits> 而不是 <utility>?

Why is std::move defined in <type_traits> but not in <utility>?

cppreference.com and the cplusplus.com 说它是在 <utility> 中定义的。但是我的 IDE 将我发送到 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits"。 不明白为什么。

标准仅指定 #include <utility> 允许您访问 std::move。它不需要该定义实际存在于该头文件中。标准库可以根据实施者认为合适的方式在内部自由组织。例如,<utility> 可能只包含 #include <utility_internal>(然后包含实际的库实现)——标准中没有任何内容禁止这样做。

在 Microsoft 的标准库实现中,<utility> 有一个 #include <type_traits> 因此,如果你这样做 #include <utility>,你将得到std::move。这就是你应该关心的。