Укажите noexcept для вариационного шаблона (gcc и clang не согласны) [duplicate]

Я столкнулся с этим и попробовал все другие решения. У меня не было файла .class в моей папке HTML, у меня был только файл .java. Когда я добавил файл .class, программа работала нормально.

2
задан PSkocik 27 July 2015 в 14:04
поделиться

2 ответа

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().

9
ответ дан Quentin 22 August 2018 в 03:19
поделиться

Если вы хотите использовать синтаксический сахар при проверке функции 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 .

2
ответ дан Columbo 22 August 2018 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: