From 9ab10d6e680ca835d1dfdfbceb9f18f330f994fc Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 27 Dec 2015 01:21:30 +0100 Subject: Core/Misc: VS 2013 build fix - horrible hack. --- src/common/Utilities/Containers.h | 3 ++- src/common/Utilities/Random.h | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'src/common') diff --git a/src/common/Utilities/Containers.h b/src/common/Utilities/Containers.h index 5d16576baf2..a348cb3c523 100644 --- a/src/common/Utilities/Containers.h +++ b/src/common/Utilities/Containers.h @@ -81,7 +81,8 @@ namespace Trinity template typename C::const_iterator SelectRandomWeightedContainerElement(C const& container, std::vector weights) { - std::discrete_distribution dd(weights.begin(), weights.end()); + Trinity::discrete_distribution_param ddParam(weights.begin(), weights.end()); + std::discrete_distribution dd(ddParam); typename C::const_iterator it = container.begin(); std::advance(it, dd(SFMTEngine::Instance())); return it; diff --git a/src/common/Utilities/Random.h b/src/common/Utilities/Random.h index c919c28bcc8..7fc4fae9cb3 100644 --- a/src/common/Utilities/Random.h +++ b/src/common/Utilities/Random.h @@ -69,4 +69,26 @@ public: static SFMTEngine& Instance(); }; +// Ugly, horrible, i don't even..., hack for VS2013 to work around missing discrete_distribution(iterator, iterator) constructor +namespace Trinity +{ +#if COMPILER == COMPILER_MICROSOFT && _MSC_VER <= 1800 + template + struct discrete_distribution_param : public std::discrete_distribution::param_type + { + typedef typename std::discrete_distribution::param_type base; + + template + discrete_distribution_param(InIt begin, InIt end) : base(_Noinit()) + { + this->_Pvec.assign(begin, end); + this->_Init(); + } + }; +#else + template + using discrete_distribution_param = typename std::discrete_distribution::param_type; +#endif +} + #endif // Random_h__ -- cgit v1.2.3