From 9d5a03233f4b9495b8698ed8e4bad3d246cbbf13 Mon Sep 17 00:00:00 2001 From: scott-linder Date: Mon, 30 Dec 2013 19:33:17 -0500 Subject: Added std::forward in order to respect move semantics in some methods. Previously, calls to the methods assign(...), emit(...), and add(...) would fail if constructor arguments relied upon move semantics. --- entityx/Entity.h | 4 ++-- entityx/Event.h | 2 +- entityx/System.h | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/entityx/Entity.h b/entityx/Entity.h index 9577375..1758c3f 100644 --- a/entityx/Entity.h +++ b/entityx/Entity.h @@ -474,7 +474,7 @@ class EntityManager : entityx::help::NonCopyable, public enable_shared_from_this */ template ptr assign(Entity::Id entity, Args && ... args) { - return assign(entity, ptr(new C(args ...))); + return assign(entity, ptr(new C(std::forward(args) ...))); } /** @@ -630,7 +630,7 @@ ptr Entity::assign(ptr component) { template ptr Entity::assign(Args && ... args) { assert(valid()); - return manager_.lock()->assign(id_, args ...); + return manager_.lock()->assign(id_, std::forward(args) ...); } template diff --git a/entityx/Event.h b/entityx/Event.h index e60e7d7..dac1bb4 100644 --- a/entityx/Event.h +++ b/entityx/Event.h @@ -160,7 +160,7 @@ class EventManager : entityx::help::NonCopyable { */ template void emit(Args && ... args) { - E event(args ...); + E event(std::forward(args) ...); auto sig = signal_for(E::family()); sig->emit(static_cast(&event)); } diff --git a/entityx/System.h b/entityx/System.h index 132b8b9..9c0b2ec 100644 --- a/entityx/System.h +++ b/entityx/System.h @@ -12,6 +12,7 @@ #include +#include #include #include #include "entityx/config.h" @@ -108,7 +109,7 @@ class SystemManager : entityx::help::NonCopyable, public enable_shared_from_this */ template ptr add(Args && ... args) { - ptr s(new S(args ...)); + ptr s(new S(std::forward(args) ...)); add(s); return s; } -- cgit v1.2.3