Эх сурвалжийг харах

Fix compilation error when using C++11.

The issue occurs when the template type deduction results in NodeType
being const.

Shortened version of compile error:

no matching function for call to 'operator new'
      new (p) NodeType(std::forward<Args>(args)...);

candidate function not viable: no known conversion from 'const
std::__1::basic_string<char, std::__1::char_traits<char>,
std::__1::allocator<char> > *' to 'void *' for 2nd argument; take the
address of the argument with &
inline __attribute__ ((__visibility__("hidden"), __always_inline__))
void* operator new (std::size_t, void* __p) noexcept {return __p;}
Tom Hughes 10 жил өмнө
parent
commit
56327ecc02

+ 1 - 1
src/google/protobuf/map.h

@@ -172,7 +172,7 @@ class Map {
     !defined(GOOGLE_PROTOBUF_OS_NACL) && !defined(GOOGLE_PROTOBUF_OS_ANDROID)
     template<class NodeType, class... Args>
     void construct(NodeType* p, Args&&... args) {
-      new (p) NodeType(std::forward<Args>(args)...);
+      new ((void*)p) NodeType(std::forward<Args>(args)...);
     }
 
     template<class NodeType>