template< typename Lambda > void invoke_noexcept_code_block(Lambda && lambda) { try { lambda(); } catch(...) { std::abort(); } }В этом месте (и в других аналогичных) наверно стоило бы использовать std::forward для случая различных перегрузок сигнатур:
struct MyFunctor { void operator()() & { std::cout << "lvalue\n"; } void operator()() && { std::cout << "rvalue\n"; } };Если передать временный объект функтора в функцию, то:
- Д.В.
Без
std::forwardвнутри вызоветсяoperator() &, потому что имя параметраlambda— это lvalue, даже если параметр был связан с rvalue.С
std::forward<Lambda>(lambda)()вызоветсяoperator() &&для rvalue иoperator() &для lvalue.Если переданная лямбда-функция или функтор захватывает move-only типы (например, std::unique_ptr) и её operator() спроектирован для вызова только как rvalue, без std::forward код не скомпилируется.
A new version of SObjectizer is available:This is an important update with a fix for a bug in the timer_heap implementation that affects the default SObjectizer timer engine.
--
Вы получили это сообщение, поскольку подписаны на группу "SObjectizer".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес sobjectizer...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/sobjectizer/f5665ef5-c349-41e2-bc09-914f6238a8f4n%40googlegroups.com.
struct timer_type : public timer_object< Thread_Safety > {
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/sobjectizer/e7560c1a-91bd-4282-9ccd-eefa7d316615n%40googlegroups.com.
(оно ни на что не влияет, просто избыточно)
Тут public не обязательно для структур:struct timer_type : public timer_object< Thread_Safety > {