Я попытался имитировать это с помощью макроса (я назвал его TRY), который немедленно возвращает значение в случае ошибки или передает значение в противном случае.
Например
Код: Выделить всё
#include
#include
#define TRY(x) __extension__({ \
auto tmp = x; \
if (!tmp) \
return std::unexpected(tmp.error()); \
tmp.value(); \
})
std::expected effe(bool err) {
if (!err)
return std::unexpected(false);
return 5;
}
std::expected effe2(bool err) {
auto r = TRY(effe(err));
return r + 3;
}
std::expected effe3(bool err) {
auto r = effe(err);
if (!r)
return std::unexpected(r.error());
return *r + 3;
}
int main() {
auto r = effe2(false);
if (!r)
printf("Error returned\n");
else
printf("r=%d\n", *r);
r = effe2(true);
if (!r)
printf("Error returned\n");
else
printf("r=%d\n", *r);
r = effe3(false);
if (!r)
printf("Error returned\n");
else
printf("r=%d\n", *r);
return 0;
}
Код: Выделить всё
effe2()
Теперь мой вопрос: помимо того факта, что "фигурные группы внутри выражения» является расширением GCC/CLANG. Видите ли вы какие-либо другие недостатки этого подхода?
Подробнее здесь: https://stackoverflow.com/questions/784 ... xpressions