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;}
This commit is contained in:
Tom Hughes 2015-07-29 13:00:06 -07:00
parent 6d72d12575
commit 56327ecc02

View File

@ -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>