diff --git a/Engine/source/console/engineFunctions.h b/Engine/source/console/engineFunctions.h index fc97a81d1..86f57feb8 100644 --- a/Engine/source/console/engineFunctions.h +++ b/Engine/source/console/engineFunctions.h @@ -91,10 +91,7 @@ struct _EngineFunctionDefaultArguments {}; template struct _EngineFunctionDefaultArguments< void(ArgTs...) > : public EngineFunctionDefaultArguments { - - template using DefVST = typename EngineTypeTraits::DefaultArgumentValueStoreType; - std::tuple ...> mArgs; private: using SelfType = _EngineFunctionDefaultArguments< void(ArgTs...) >; @@ -105,22 +102,24 @@ private: template struct Gens<0, I...>{ typedef Seq type; }; template - void copyHelper(std::tuple ...> defaultArgs, Seq) { + static void copyHelper(std::tuple ...> &args, std::tuple ...> &defaultArgs, Seq) { constexpr size_t offset = (sizeof...(ArgTs) - sizeof...(TailTs)); - std::tie(std::get(mArgs)...) = defaultArgs; + std::tie(std::get(args)...) = defaultArgs; } - template using MaybeVoidEnabled = typename std::enable_if::type; + template using MaybeSelfEnabled = typename std::enable_if::type; - template MaybeVoidEnabled tailInit(DefVST ...tail) { - mNumDefaultArgs = sizeof...(TailTs); - copyHelper(std::make_tuple(tail...), typename Gens::type()); + template static MaybeSelfEnabled tailInit(DefVST ...tail) { + std::tuple argsT; + std::tuple tailT = std::make_tuple(tail...); + SelfType::copyHelper(argsT, tailT, typename Gens::type()); + return argsT; }; + public: - template _EngineFunctionDefaultArguments(DefVST ...tail) - { - tailInit(tail...); - } + template _EngineFunctionDefaultArguments(DefVST ...tail) + : EngineFunctionDefaultArguments({sizeof...(TailTs)}), mArgs(tailInit(tail...)) + {} }; #pragma pack( pop )