Gtest: Fix/workaround MSVC complains about use of struct with alignment
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 15 Dec 2016 16:53:27 +0000 (17:53 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 15 Dec 2016 16:53:57 +0000 (17:53 +0100)
extern/gtest/include/gtest/internal/gtest-internal.h

index ebd1cf615de07d9b5ab0e60c71008261efe54213..ca15a2f3a781122d67b421a9fb90ba5da2c02ebd 100644 (file)
 #include <string>
 #include <vector>
 
+#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
+# include <type_traits>
+#endif
+
 #include "gtest/gtest-message.h"
 #include "gtest/internal/gtest-string.h"
 #include "gtest/internal/gtest-filepath.h"
@@ -854,6 +858,7 @@ struct AddReference<T&> { typedef T& type; };  // NOLINT
 template <typename From, typename To>
 class ImplicitlyConvertible {
  private:
+#if !((__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800))
   // We need the following helper functions only for their types.
   // They have no implementations.
 
@@ -874,6 +879,7 @@ class ImplicitlyConvertible {
   // implicitly converted to type To.
   static char Helper(To);
   static char (&Helper(...))[2];  // NOLINT
+#endif
 
   // We have to put the 'public' section after the 'private' section,
   // or MSVC refuses to compile the code.
@@ -883,6 +889,8 @@ class ImplicitlyConvertible {
   // instantiation.  The simplest workaround is to use its C++0x type traits
   // functions (C++Builder 2009 and above only).
   static const bool value = __is_convertible(From, To);
+#elif (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
+  static const bool value = std::is_convertible<From, To>::value;
 #else
   // MSVC warns about implicitly converting from double to int for
   // possible loss of data, so we need to temporarily disable the