Я столкнулся с этим и попробовал все другие решения. У меня не было файла .class в моей папке HTML, у меня был только файл .java. Когда я добавил файл .class, программа работала нормально.
void method1() noexcept(noexcept(strProcessor(""))) {
// Second 'noexcept' ^^^^^^^^^ ^
Первый - это спецификатор noexcept
, который указывает, является ли method1()
noexcept .
Вложенные один является noexcept
оператором , который проверяет, является ли strProcessor()
noexcept при вызове с ""
.
Второй случай немного tricky: Type
все еще не завершен в точке, в которой мы хотели бы использовать method1()
внутри noexcept
. Я пришел к следующему обходному пути, злоупотребляя указателем-членом:
void method2() noexcept(noexcept(
(std::declval<Type>().*&Type::method1)()
)) {};
Однако я не думаю, что есть случай, когда вы могли бы только вывести method2()
noexcept из спецификации method1()
.
Если вы хотите использовать синтаксический сахар при проверке функции noexcept
функции, вы можете использовать вспомогательную функцию следующим образом:
template <typename R, typename... Params>
constexpr bool is_noexcept(R(*p)(Params...)) {
return noexcept(p(std::declval<Params>()...));
}
И применить таким образом:
void method1() noexcept(is_noexcept(strProcessor)) …
Demo .