diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h index dc4a4d231b..09d64acc79 100644 --- a/src/server/shared/Common.h +++ b/src/server/shared/Common.h @@ -38,6 +38,7 @@ #include #include #include +#include #include "Debugging/Errors.h" @@ -144,4 +145,14 @@ typedef std::vector StringVector; #define MAX_QUERY_LEN 32*1024 +namespace Trinity +{ + //! std::make_unique implementation (TODO: remove this once C++14 is supported) + template + std::unique_ptr make_unique(Args&& ...args) + { + return std::unique_ptr(new T(std::forward(args)...)); + } +} + #endif diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index e22a06e635..5b3782fce5 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -23,6 +23,7 @@ #include "Appender.h" #include "Logger.h" #include "StringFormat.h" +#include "Common.h" #include #include @@ -64,7 +65,7 @@ class Log template inline void outMessage(std::string const& filter, LogLevel const level, const char* fmt, Args const&... args) { - write(std::unique_ptr(new LogMessage(level, filter, Trinity::StringFormat(fmt, args...)))); + write(Trinity::make_unique(level, filter, Trinity::StringFormat(fmt, args...))); } template @@ -73,7 +74,7 @@ class Log if (!ShouldLog("commands.gm", LOG_LEVEL_INFO)) return; - std::unique_ptr msg(new LogMessage(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...)))); + std::unique_ptr msg = Trinity::make_unique(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...))); msg->param1 = std::to_string(account);