Я придумал следующий код для преобразования R()
-like в функцию void()
-like:
#include <utility>
template<class Callable>
auto discardable(Callable&& callable)
{ return [&]() { (void) std::forward<Callable>(callable)(); }; }
// ^-- is it ok?
int main()
{
auto f = discardable([n=42]() mutable { return n--; });
f();
}
Я беспокоюсь о захвате по ссылке.
- Это четко определено?
- Я гарантированно, что
callable
никогда не копируется и никогда не используется после окончания его жизни?
Это помечено С++ 14, но применяется ко всем следующим стандартам.