I am reading to an open source project. I am not able to understand what this snippet does ?
EXPORT Result LoaderParse(LoaderContext *Cxt, Context **Module, const char *Path) {
return wrap([&]() {
return fromloa(Cxt)->parse(std::filesystem::absolute(Path));
}, [&](auto &&Res) {
*Mod = toAST((*Res).release());
}, Cxt, Module);
}
template <typename T, typename U, typename... CxtT>
inline Result wrap(T &&Proc, U &&Then, CxtT *...Cxts) noexcept {
if (isC(Cxts...)) {
if (auto Res = Proc()) {
Then(Res);
return 0;
} else {
return 1;
}
} else {
return 2;
}
}
Can anyone explain me what does [&]
do in this case?