Std:: string_view по временной привязке строки ASan

Это иллюстративный пример ссылки:

#include <string>
#include <string_view>
#include <iostream>

std::string foo() {
    return "test";
}

int main() {
    std::string_view bar = foo(); // bar is pointed to destructed string
    std::cout << bar << std::endl;
}

Адрес дезинфицирующего устройства не может его поймать, по крайней мере, с настройками по умолчанию. Можно ли уловить такие ошибки с помощью дезинфицирующего средства для адреса?

UPD.

Сообщено об этой ошибке:

Ответы

Ответ 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> >&)