Commit d7787780 authored by Feng Xiao's avatar Feng Xiao

Fix thread local annotatoin and add back type traits is_convertable for MSVC

parent 6a949cda
...@@ -312,7 +312,7 @@ class LIBPROTOBUF_EXPORT Arena { ...@@ -312,7 +312,7 @@ class LIBPROTOBUF_EXPORT Arena {
static const size_t kHeaderSize = sizeof(Block); static const size_t kHeaderSize = sizeof(Block);
static google::protobuf::internal::SequenceNumber lifecycle_id_generator_; static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
static __thread ThreadCache thread_cache_; static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_;
// SFINAE for skipping addition to delete list for a Type. This is mainly to // SFINAE for skipping addition to delete list for a Type. This is mainly to
// skip proto2/proto1 message objects with cc_enable_arenas=true from being // skip proto2/proto1 message objects with cc_enable_arenas=true from being
......
...@@ -314,6 +314,12 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { ...@@ -314,6 +314,12 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) {
} }
#endif #endif
#if defined(_MSC_VER)
#define GOOGLE_THREAD_LOCAL __declspec(thread)
#else
#define GOOGLE_THREAD_LOCAL __thread
#endif
// =================================================================== // ===================================================================
// from google3/base/basictypes.h // from google3/base/basictypes.h
......
...@@ -103,7 +103,7 @@ template <class T> struct remove_reference; ...@@ -103,7 +103,7 @@ template <class T> struct remove_reference;
template <class T> struct add_reference; template <class T> struct add_reference;
template <class T> struct remove_pointer; template <class T> struct remove_pointer;
template <class T, class U> struct is_same; template <class T, class U> struct is_same;
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) #if !(defined(__GNUC__) && __GNUC__ <= 3)
template <class From, class To> struct is_convertible; template <class From, class To> struct is_convertible;
#endif #endif
...@@ -322,7 +322,7 @@ template<typename T, typename U> struct is_same : public false_type { }; ...@@ -322,7 +322,7 @@ template<typename T, typename U> struct is_same : public false_type { };
template<typename T> struct is_same<T, T> : public true_type { }; template<typename T> struct is_same<T, T> : public true_type { };
// Specified by TR1 [4.6] Relationships between types // Specified by TR1 [4.6] Relationships between types
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) #if !(defined(__GNUC__) && __GNUC__ <= 3)
namespace type_traits_internal { namespace type_traits_internal {
// This class is an implementation detail for is_convertible, and you // This class is an implementation detail for is_convertible, and you
......
...@@ -610,7 +610,7 @@ TEST(TypeTraitsTest, TestIsSame) { ...@@ -610,7 +610,7 @@ TEST(TypeTraitsTest, TestIsSame) {
} }
TEST(TypeTraitsTest, TestConvertible) { TEST(TypeTraitsTest, TestConvertible) {
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) #if !(defined(__GNUC__) && __GNUC__ <= 3)
EXPECT_TRUE((is_convertible<int, int>::value)); EXPECT_TRUE((is_convertible<int, int>::value));
EXPECT_TRUE((is_convertible<int, long>::value)); EXPECT_TRUE((is_convertible<int, long>::value));
EXPECT_TRUE((is_convertible<long, int>::value)); EXPECT_TRUE((is_convertible<long, int>::value));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment