Реализация может добавить noexcept
к не виртуальной функции, если она никогда не выдаст исключение, см. [res.on.exception.handling] / 5 C ++ 17 стандарт (черновик N4659).
Однако реализации не разрешено добавлять constexpr
в функцию. См. [constexpr.functions] / 1 . См. Также выпуск LWG 2013 .
std::condition_variable::condition_variable()
не указан ни constexpr
, ни noexcept
, но нет обстоятельств, при которых необходимо выбросить исключение. См. [thread.condition.condvar] .
Итак, noexcept
в порядке, а constexpr
- нет. Однако функции, помеченные constexpr
, которых не должно быть, являются распространенным несоответствием. Например, G CC объявляет математические функции сознательно constexpr
, хотя они не должны быть.