Я использую два std::filesystem::path
-экземпляра, к которым я хочу применить std :: mismatch.Один из этих двух экземпляров пути является подкаталогом другого, и я хотел использовать std :: mismatch, чтобы получить итератор для позиции, где оба отличаются.
например
void filesystem_mismatch() {
const std::filesystem::path path{"/a/b/file"};
const std::filesystem::path prefix{"/a/b"};
auto tmp = std::mismatch(path.begin(), path.end(), prefix.begin());
std::cout << *(tmp.first) << std::endl;
}
ЕслиЯ выполняю эту функцию, все работает, но если я делаю следующее:
void filesystem_mismatch2() {
const std::filesystem::path path{"/a/b/c/file"};
const std::filesystem::path prefix{"/a/b/c"};
auto tmp = std::mismatch(path.begin(), path.end(), prefix.begin());
std::cout << *(tmp.first) << std::endl;
}
Я получаю segfault при разыменовании итератора tmp.first.
Что я делаю здесь неправильно?Я использую g ++ 8.2.0 и линковку с libstdc ++. So.6.25
Кстати, я создал рабочий пример в coliru, но там ошибка не возникает.
https://coliru.stacked -crooked.com / а / deb0d007041db603