summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon')
-rw-r--r--indra/llcommon/llmake.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/indra/llcommon/llmake.h b/indra/llcommon/llmake.h
index 02463d97ea..f901ee2bf1 100644
--- a/indra/llcommon/llmake.h
+++ b/indra/llcommon/llmake.h
@@ -23,6 +23,9 @@
#if ! defined(LL_LLMAKE_H)
#define LL_LLMAKE_H
+// If we're using a compiler newer than VS 2013, use variadic llmake().
+#if (! defined(_MSC_VER)) || (_MSC_VER > 1800)
+
/**
* Usage: llmake<SomeTemplate>(args...)
*
@@ -35,6 +38,22 @@ CLASS_TEMPLATE<ARGS...> llmake(ARGS && ... args)
return CLASS_TEMPLATE<ARGS...>(std::forward<ARGS>(args)...);
}
+#else // older implementation for VS 2013
+
+template <template<typename> class CLASS_TEMPLATE, typename ARG1>
+CLASS_TEMPLATE<ARG1> llmake(const ARG1& arg1)
+{
+ return CLASS_TEMPLATE<ARG1>(arg1);
+}
+
+template <template<typename, typename> class CLASS_TEMPLATE, typename ARG1, typename ARG2>
+CLASS_TEMPLATE<ARG1, ARG2> llmake(const ARG1& arg1, const ARG2& arg2)
+{
+ return CLASS_TEMPLATE<ARG1, ARG2>(arg1, arg2);
+}
+
+#endif // VS 2013 workaround
+
/// dumb pointer template just in case that's what's wanted
template <typename T>
using dumb_pointer = T*;