Какой инструмент Clang ловит вне диапазона итераторов? - PullRequest
2 голосов
/ 08 июня 2019

MSVC ловит ошибку в строке 7 в следующем коде.В частности, remove_copy() в строке 9 копирует в строку, которая недостаточно велика.При отладке в MSVC ошибка: Выражение: невозможно разыменовать строковый итератор, поскольку он находится вне диапазона (например, конечный итератор) .При использовании Clang-8 я не получаю сообщение об ошибке.

Как я могу отловить эту ошибку, используя Clang в Windows или Linux?

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string source{ "foo-bar-baz" };
    std::string dest; // PROBLEM

    auto last = std::remove_copy(begin(source), end(source), begin(dest), '-');
    dest.erase(last, end(dest));

    std::cout << source << "\n"; // "foo-bar-baz"
    std::cout << dest << "\n"; // expected: "foobarbaz"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...