Renderer/RenderResources: Fix PushReleaseCallback forwarding ref

Using a concept here breaks perfect forwarding
This commit is contained in:
Lynix 2023-11-28 20:20:36 +01:00
parent 079f153640
commit 63ddf35a86
2 changed files with 5 additions and 5 deletions

View File

@ -42,7 +42,7 @@ namespace Nz
template<typename T> void PushForRelease(const T& value) = delete; template<typename T> void PushForRelease(const T& value) = delete;
template<typename T> void PushForRelease(T&& value); template<typename T> void PushForRelease(T&& value);
template<std::invocable F> void PushReleaseCallback(F&& callback); template<typename F> void PushReleaseCallback(F&& callback);
virtual void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) = 0; virtual void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) = 0;

View File

@ -39,7 +39,7 @@ namespace Nz
{ {
static_assert(std::is_rvalue_reference_v<decltype(value)>); static_assert(std::is_rvalue_reference_v<decltype(value)>);
using ReleaseData = ReleasableData<std::remove_cv_t<std::remove_reference_t<T>>>; using ReleaseData = ReleasableData<std::remove_cvref_t<T>>;
ReleaseData* releasable = Allocate<ReleaseData>(); ReleaseData* releasable = Allocate<ReleaseData>();
PlacementNew(releasable, std::forward<T>(value)); PlacementNew(releasable, std::forward<T>(value));
@ -47,10 +47,10 @@ namespace Nz
m_releaseQueue.push_back(releasable); m_releaseQueue.push_back(releasable);
} }
template<std::invocable F> template<typename F>
void RenderResources::PushReleaseCallback(F&& callback) void RenderResources::PushReleaseCallback(F&& callback)
{ {
using ReleaseFunctor = ReleasableFunctor<std::remove_cv_t<std::remove_reference_t<F>>>; using ReleaseFunctor = ReleasableFunctor<std::remove_cvref_t<F>>;
ReleaseFunctor* releasable = Allocate<ReleaseFunctor>(); ReleaseFunctor* releasable = Allocate<ReleaseFunctor>();
PlacementNew(releasable, std::forward<F>(callback)); PlacementNew(releasable, std::forward<F>(callback));
@ -125,7 +125,7 @@ namespace Nz
{ {
} }
template<std::invocable T> template<typename T>
void RenderResources::ReleasableFunctor<T>::Release() void RenderResources::ReleasableFunctor<T>::Release()
{ {
m_lambda(); m_lambda();