summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2015-02-02 10:13:41 +0100
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2015-02-02 10:13:41 +0100
commit877c2529e86686cc2005e7a523d061c955a4f468 (patch)
treeb166fa2bfdaba33e6e7608509334baa5329d780e
parentc169085cc9a9eb9c7c911d1b68db1f08a95c0d27 (diff)
It was reported (see http://www.php-cpp.com/documentation#comment-1830049280) that visual c++ has not support for initializer_lists, well at least old versions of it so not support it (see https://msdn.microsoft.com/en-us/library/hh567368.aspx), so we added a couple of extra checks to ensure that PHP-CPP also compilers on these olders compilers
-rw-r--r--include/argument.h21
-rw-r--r--include/array.h8
-rw-r--r--include/value.h6
3 files changed, 34 insertions, 1 deletions
diff --git a/include/argument.h b/include/argument.h
index ddb6390..f45a43a 100644
--- a/include/argument.h
+++ b/include/argument.h
@@ -144,10 +144,31 @@ private:
};
/**
+ * Old Visual C++ environments do not support initializer lists
+ */
+#if defined(_MSC_VER) && _MSC_VER < 1800
+
+/**
+ * For old visual c++ compilers, arguments should be passed as vectors
+ */
+using Arguments = std::vector<Argument>;
+
+/**
+ * Other compilers, and visual C++ 2013 do support initializer lists
+ */
+#else
+
+/**
* A list of arguments can be supplied to methods
* @type Arguments
*/
using Arguments = std::initializer_list<Argument>;
+
+/**
+ * End of visual C++ check
+ */
+#endif
+
/**
* End of namespace
diff --git a/include/array.h b/include/array.h
index 882670a..02fe4c4 100644
--- a/include/array.h
+++ b/include/array.h
@@ -57,12 +57,18 @@ public:
*/
template <typename T>
Array(const std::map<std::string,T> &value) : Value(value) {}
-
+
+// old visual c++ environments have no support for initializer lists
+# if !defined(_MSC_VER) || _MSC_VER >= 1800
+
/**
* Constructor from an initializer list
* @param value
*/
Array(const std::initializer_list<Value> &value) : Value(value) {}
+
+// end of visual c++ check
+# endif
/**
* Destructor
diff --git a/include/value.h b/include/value.h
index b87574b..2440532 100644
--- a/include/value.h
+++ b/include/value.h
@@ -81,6 +81,9 @@ public:
for (auto &elem : input) setRaw(i++, elem);
}
+ // old visual c++ environments have no support for initializer lists
+# if !defined(_MSC_VER) || _MSC_VER >= 1800
+
/**
* Constructor from an initializer list
* @param value
@@ -94,6 +97,9 @@ public:
// set all elements
for (auto &elem : value) setRaw(i++, elem);
}
+
+ // end of visual c++ check
+# endif
/**
* Constructor from a map (this will create an associative array)