Явного преобразования std :: exception_ptr в bool не существует ... VS2010 ошибка? - PullRequest
0 голосов
/ 05 февраля 2020

Установлен VS2010 + SP1 для сборки доморощенного OpenCV 3.4. Произошла ошибка в основном модуле asyn c. cpp (112):

111 #if CV__EXCEPTION_PTR
112 if(has_exception && exception)
113 {...}
117 #endif

has_exception is bool, исключение - std :: exception_ptr. Ошибка: C2677.

Выполнен простой тест на основе примера в (http://www.cplusplus.com/reference/exception/exception_ptr/):

#include "stdafx.h"
#include <exception>
int _tmain (int argc, _TCHAR* argv[]) {
  std::exception_ptr p;
  bool b1, b2;
  b1 = (bool)p;
  b2 = static_cast<bool>(p);
  return 0;
}

Не удалось отладить оба приведения с помощью C2440. На основе документов (https://en.cppreference.com/w/cpp/error/exception_ptr) исключение_ptr должно быть «контекстно-конвертируемым» и явно конвертируемым. Я думаю, это как-то связано с моим окружением, но я не знаю, как это исправить.

1 Ответ

2 голосов
/ 05 февраля 2020

Как отмечено здесь , std::exception_ptr действительно должно быть контекстно конвертируемым в bool. Если это не работает с вашим компилятором, то это дефект компилятора. Хотя VS2010 довольно старый и вряд ли будет исправлен.

Вы можете обойти его, сравнив указатель с созданным по умолчанию std::exception_ptr, который является нулевым указателем:

if (ptr != std::exception_ptr()) {
    // ptr is not null
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...