Может ли C++20 std::ranges::find_if выдавать исключения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли C++20 std::ranges::find_if выдавать исключения?

Сообщение Anonymous »

На странице std::ranges::find, std::ranges::find_if, std::ranges::find_if_not исключения не упоминаются, но ни одно из них не помечено как noException.
Я предполагаю, что поведение будет таким же, как у std::find, std::find_if, std::find_if_not. На этой странице упоминается следующее:

Код: Выделить всё

Exceptions

The overloads with a template parameter named ExecutionPolicy report errors as follows:

- If execution of a function invoked as part of the algorithm throws an exception and ExecutionPolicy is one of the standard policies, std::terminate is called. For any other ExecutionPolicy, the behavior is implementation-defined.

- If the algorithm fails to allocate memory, std::bad_alloc is thrown.
Итак, у меня есть два вопроса: 1. Верно ли мое предположение и 2. Будет ли следующая функция иметь значение noException(true)?

Код: Выделить всё

bool checkExtensionSupport(std::span availableExtensions, const char* extensionName) noexcept(?)
{
auto match = [extensionName](const vk::ExtensionProperties& p) {
return std::strcmp(p.extensionName, extensionName) == 0;
};

auto result = std::ranges::find_if(availableExtensions, match);
return result != availableExtensions.end();
}
потому что лямбда-выражение не выполняет никаких динамических выделений, а strcmp не является исключением.

Подробнее здесь: https://stackoverflow.com/questions/785 ... exceptions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»