Что определяет, является ли runtime_error is_nothrow_copy_constructible? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть реализация класса исключения, который наследуется от std::runtime_error:

class custom_error : public std::runtime_error {
public:
  explicit custom_error(const std::string &arg)
      : std::runtime_error(arg){};

  ~custom_error() noexcept override = default;
};

Эта реализация, насколько это возможно, идентична реализации libstdc++ других подклассов std::runtime_error.

При запуске clang-tidy над этим кодом (в некоторых случаях - см. Ниже) выдается следующее предупреждение:

warning: thrown exception type is not nothrow copy constructible [cert-err60-cpp]

Соответствующая информация об этой проверке доступназдесь .Я считаю, что понимаю информацию на этой странице.В частности, я считаю, что соответствующая информация заключается в том, что std::runtime_error и его подклассы должны иметь черту is_nothrow_copy_constructible.

. У меня возникли проблемы при согласовании следующего.

Сценарий 1:

Следующий код в проводнике компилятора демонстрирует, что класс is_nothrow_copy_constructible при компиляции с gcc 5.x и новее, но не при компиляции с gcc 4.x.

Сценарий 2:

На моем ноутбуке, работающем под управлением Ubuntu 18.04, тот же класс также is_nothrow_copy_constructible при компиляции с gcc 5, gcc 7, clang 3.8, clang 5 и clang 6, причем все они связаны с libstdc++.so.6.0.25.

Сценарий 3:

На travis-ci, работающем с экземпляром Ubuntu 14.04, я не могу найти ни одной конфигурации, в которой тот же класс is_nothrow_copy_constructible.Это включает в себя использование gcc 5, gcc 6, gcc 7, clang 4 и clang 5, связанных с libstdc++.so.6.0.25.

. Здесь приведен специальный журнал сборки travis , демонстрирующий сбой теста, который используетGCC 5, связанный с libstdc++.so.6.0.25.(custom_error переименовывается просто Exception.)

Вопрос:

Может ли кто-нибудь объяснить мне, что может определять, является ли класс is_nothrow_copy_constructible?

КМне, выше, демонстрирует, что ответ может отличаться, когда:

  • реализация
  • компилятор и
  • стандартная версия библиотеки

идентичны.

...