Ответ 1
Мое предположение (вы не предоставили версию компилятора) заключается в том, что operator <<
реализуется извне, поэтому Асан не может его дезинфицировать и обнаруживать ошибку (если вы не перестраиваете libstdС++ с Asan). Вот то, что я получаю с моим GCC 6.2 (я слегка модифицировал воспроизведение, поскольку у меня нет доступа к c++1z
):
call operator delete(void*)
.L17:
movq %rbx, %rsi
movl std::cout, %edi
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
call std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)