下面std::move()
的代码在 Visual Studio 2013(带有调试配置)中编译时会发出运行时警告,因为它检测dest
到nullptr
. 但是,源范围是空的,因此dest
永远不应访问。C++ 标准可能不清楚这是否应该被允许?它声明: 要求:结果不得在 [first,last) 范围内。
Anullptr
似乎满足该要求。
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec;
int* dest = nullptr;
// The range [begin(vec),end(vec)) is empty, so dest should never be accessed.
// However, it results in an assertion warning in VS2013.
std::move(std::begin(vec), std::end(vec), dest);
}