В приведенном ниже коде я пытаюсь использовать спецификацию условных исключений для функций, но компиляция не удалась, хотя, если она используется вне функции, она работает просто отлично.
void may_throw();
// ERROR: expression must have bool type or be convertible to bool
void check () noexcept(may_throw());
int main()
{
// works just fine!
std::cout << noexcept(may_throw());
}
Вопрос в том, как проверить, если функция генерирует без изменение прототипа функции для условного указания noexcept
?
Я не могу изменить прототип функции, потому что дело в том, чтобы проверить, если функция не выдает, если она должна возвращать true или false.
РЕДАКТИРОВАТЬ
Я пытаюсь высмеять noexcept
, но похоже, что он не работает для макросов.
#include <iostream>
#if 0
#define ASDF(...) (void)0
#else
#define ASDF(...) throw 1
#endif
void check() noexcept(noexcept(ASDF()))
{
// wrong!
// std::cout << noexcept(noexcept(ASDF()));
// edit: it should be this, and it works.
// (tnx: StoryTeller-UnslanderMonica)
std::cout << noexcept(ASDF());
ASDF(0);
}
int main()
{
check();
}