Fix issue with return type in inplace_function

This commit is contained in:
Andreas Tsouchlos 2024-03-02 22:58:08 +01:00
parent 63680cc379
commit 083ce1a150

View File

@ -59,7 +59,7 @@ public:
return_t operator()(args_t... args) { return_t operator()(args_t... args) {
if (mWrapper) if (mWrapper)
mWrapper(mStorage, args...); return mWrapper(mStorage, args...);
else else
throw std::bad_function_call(); throw std::bad_function_call();
} }
@ -77,7 +77,7 @@ public:
requires std::is_invocable_r_v<return_t, decltype(F), args_t...> requires std::is_invocable_r_v<return_t, decltype(F), args_t...>
void bind() { void bind() {
mWrapper = [](storage_t, args_t... args) { mWrapper = [](storage_t, args_t... args) {
std::invoke(F, std::forward<args_t>(args)...); return std::invoke(F, std::forward<args_t>(args)...);
}; };
} }
@ -96,8 +96,8 @@ public:
new (mStorage)(class_t*){&c}; new (mStorage)(class_t*){&c};
mWrapper = [](storage_t storage, args_t... args) { mWrapper = [](storage_t storage, args_t... args) {
std::invoke(F, reinterpret_cast<class_t*>(storage), return std::invoke(F, reinterpret_cast<class_t*>(storage),
std::forward<args_t>(args)...); std::forward<args_t>(args)...);
}; };
} }
@ -111,8 +111,8 @@ public:
void bind(F f) { void bind(F f) {
new (mStorage) F{std::move(f)}; new (mStorage) F{std::move(f)};
mWrapper = [](storage_t storage, args_t... args) { mWrapper = [](storage_t storage, args_t... args) {
std::invoke(*reinterpret_cast<F*>(storage), return std::invoke(*reinterpret_cast<F*>(storage),
std::forward<args_t>(args)...); std::forward<args_t>(args)...);
}; };
} }