以下代码显示未定义的行为:
#include <memory>
void consumer(std::string && str){}
int main(){
std::string str = "foo";
consumer(std::move(str));
str = "bar"; //<- UB
}
我怎么能抓到这个? gcc
或clang
中似乎没有任何编译器警告。
我也尝试使用未定义的行为消毒剂:
clang++-3.9 -std=c++1z -g -Weverything -fsanitize=undefined -o main main.cpp
没有抓到任何东西 是否有可靠的方法来解决这些问题?