Код: Выделить всё
#define DEDUCED_NOEXCEPT_FUNCTION(X) noexcept(noexcept(X)) { return (X); }
// Example: f may be noexcept or not depending on parameter types
void f(char *) {/*...*/}
void f(int) noexcept {/*...*/}
// The following expands to:
// void g(auto x)
// noexcept(noexcept(f(x))) {
// return (f(x));
// }
void g(auto x) DEDUCED_NOEXCEPT_FUNCTION(f(x))
// The macro works for lambdas too.
// The following expands to:
// auto h = [] (auto x)
// noexcept(noexcept(f(x))) {
// return (f(x));
// };
auto h = [] (auto x) DEDUCED_NOEXCEPT_FUNCTION(g(x));
Есть ли способ вывести спецификатор noException, не дублируя выражение, которое не использует макросы?
(Я использую C++20, но также интересно, есть ли способы и в других языковых версиях.)
Подробнее здесь: https://stackoverflow.com/questions/797 ... g-noexcept
Мобильная версия