The problem still occurs. Maybe a clarification can be found here: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3890.html <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3890.html>
container of smart pointers? Adrian On 29 Jul 2015, at 18:49, Tommi Mäkitalo <[email protected]> wrote: Hi, did you try the latest cxxtools with the pointer to std::deque? This may fix the problem, but I'm not really sure. Tommi Am 28.07.2015 um 10:05 schrieb Jean-Marc Choulet: > Hi Tommi, > > Your modifications don’t compile on my Mac OS X. The problem is certainly the > Mac OS X compiler : > > MacBook:~ jm$ gcc --version > Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr > --with-gxx-include-dir=/usr/include/c++/4.2.1 > Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) > Target: x86_64-apple-darwin13.4.0 > Thread model: posix > MacBook:~ jm$ > > > Yesterday, I installed GCC 4.9.2 from sources. All works fine now :) > > Thanks, > > Jean-Marc > > > Le 25 juil. 2015 à 16:46, Tommi Mäkitalo < > <mailto:[email protected]>[email protected] <mailto:[email protected]>> a écrit : > >> Hi, >> >> I checked in the change. Now we have a pointer to std::deque in >> SerializationInfo. I benchmarked the variants of SerializationInfo and >> indeed the version with std::deque was significantly slower than std::vector >> and the last change to pointer to deque is about as fast as std::vector. The >> size of SerializationInfo with std::vector was 96 bytes, with std::deque 160 >> bytes and with the pointer only 80 bytes. So I feel, that the last >> implementation is indeed the best. >> >> But using a pointer is quite challenging to get copying and moving right, so >> that I hope, that there are not memory leaks or other bugs. Please test it. >> I will also test with valgrind. >> >> Tommi >> >> Am 25.07.2015 um 12:12 schrieb Tommi Mäkitalo: >>> Hi, >>> >>> I made a important change in cxxtools::SerializationInfo. >>> >>> The subnodes were held in a std::vector. We got a crash in our application >>> since addMember might reallocate the vector, which invalidates the >>> references previously got from addMember on that node. So I changed the >>> container into a std::deque, which do not invalidate references. >>> >>> I partly understand, why gcc on MacOS X has problems with that. The class >>> SerializationInfo has a member of type std::deque<SerializationInfo>. But >>> the compiler do not know the full class when it sees the declaration. I'm >>> quite sure this is fully legal C++. And it was ok with std::vector. >>> >>> But I have a idea, how to help the compiler. >>> >>> Instead of holding a std::deque, it may just have a pointer to a std::deque. >>> >>> There is a drawback but also a advantage. The drawback is, that >>> SerializationInfo has to allocate the deque, which is a additional >>> allocation. The advantage is that the sizeof(SerializationInfo) will be >>> reduces. On my system sizeof(deque) is 80 but the sizeof(pointer) is just >>> 8, so the sizeof(SerializationInfo will be reduced by 72 bytes. I guess >>> that most of the SerializationInfos won't have subnodes. There in normal >>> applications more values than arrays or objects to serialize, so that >>> overall memory consumption will be reduced. >>> >>> There are many unittests for SerializationInfo and all rpc unittests and >>> others use SerializationInfo also. So the risk to break something is >>> negligible. >>> >>> >>> Tommi >>> >>> Am 25.07.2015 um 07:33 schrieb Jean-Marc Choulet: >>>> Hello, >>>> >>>> I have installed manually automate, autoconf, … >>>> >>>> I can run autoreconf without errors . I have now a error when I try to >>>> compile cxxtools : >>>> >>>> make >>>> Making all in src >>>> >>>> … lines deleted … >>>> >>>> In file included from csvdeserializer.cpp:29: >>>> In file included from ../include/cxxtools/csvdeserializer.h:33: >>>> In file included from ../include/cxxtools/deserializer.h:33: >>>> In file included from ../include/cxxtools/composer.h:31: >>>> In file included from ../include/cxxtools/serializationinfo.h:39: >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:912:49: >>>> error: invalid application of 'sizeof' to an >>>> incomplete type 'value_type' (aka 'cxxtools::SerializationInfo') >>>> static const difference_type __block_size = sizeof(value_type) < 256 ? >>>> 4096 / sizeof(value_type) : 16; >>>> ^~~~~~~~~~~~~~~~~~ >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1183:15: >>>> note: in instantiation of template class >>>> 'std::__1::__deque_base<cxxtools::SerializationInfo, >>>> std::__1::allocator<cxxtools::SerializationInfo> >' requested here >>>> : private __deque_base<_Tp, _Allocator> >>>> ^ >>>> ../include/cxxtools/serializationinfo.h:120:17: note: in instantiation of >>>> template class 'std::__1::deque<cxxtools::SerializationInfo, >>>> std::__1::allocator<cxxtools::SerializationInfo> >' requested here >>>> typedef Nodes::iterator Iterator; >>>> ^ >>>> ../include/cxxtools/serializationinfo.h:110:7: note: definition of >>>> 'cxxtools::SerializationInfo' is not complete until the closing '}' >>>> class SerializationInfo >>>> ^ >>>> In file included from csvdeserializer.cpp:29: >>>> In file included from ../include/cxxtools/csvdeserializer.h:33: >>>> In file included from ../include/cxxtools/deserializer.h:33: >>>> In file included from ../include/cxxtools/composer.h:31: >>>> In file included from ../include/cxxtools/serializationinfo.h:39: >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1193:30: >>>> error: '__alloc_traits' is a protected member >>>> of 'std::__1::__deque_base<cxxtools::SerializationInfo, >>>> std::__1::allocator<cxxtools::SerializationInfo> >' >>>> typedef typename __base::__alloc_traits __alloc_traits; >>>> ^ >>>> ../include/cxxtools/serializationinfo.h:120:17: note: in instantiation of >>>> template class 'std::__1::deque<cxxtools::SerializationInfo, >>>> std::__1::allocator<cxxtools::SerializationInfo> >' requested here >>>> typedef Nodes::iterator Iterator; >>>> ^ >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:904:54: >>>> note: declared protected here >>>> typedef allocator_traits<allocator_type> __alloc_traits; >>>> ^ >>>> … lines deleted ... >>>> ^ >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1359:30: >>>> error: '__map_const_pointer' is a protected >>>> member of 'std::__1::__deque_base<cxxtools::SerializationInfo, >>>> std::__1::allocator<cxxtools::SerializationInfo> >>>> >' >>>> typedef typename __base::__map_const_pointer __map_const_pointer; >>>> ^ >>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:930:81: >>>> note: declared protected here >>>> typedef typename >>>> allocator_traits<__const_pointer_allocator>::const_pointer >>>> __map_const_pointer; >>>> >>>> ^ >>>> In file included from csvdeserializer.cpp:29: >>>> In file included from ../include/cxxtools/csvdeserializer.h:33: >>>> In file included from ../include/cxxtools/deserializer.h:33: >>>> In file included from ../include/cxxtools/composer.h:31: >>>> ../include/cxxtools/serializationinfo.h:679:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= vec.back(); >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:707:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= list.back(); >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:735:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= deque.back(); >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:763:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= t; >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:792:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= t; >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:838:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= v; >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:868:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= v; >>>> ^~~ >>>> ../include/cxxtools/serializationinfo.h:927:9: error: indirection requires >>>> pointer operand ('SerializationInfo::ConstIterator' (aka 'int') invalid) >>>> *it >>= t; >>>> ^~~ >>>> fatal error: too many errors emitted, stopping now [-ferror-limit=] >>>> 20 errors generated. >>>> make[2]: *** [csvdeserializer.lo] Error 1 >>>> make[1]: *** [all] Error 2 >>>> make: *** [all-recursive] Error 1 >>>> MacBook-Pro-de-Jean-Marc:cxxtools >>>> >>>> >>>> >>>> >>>> Is it possible to compile tntnet on Mac OS X ? >>>> >>>> Thanks, >>>> >>>> Jean-Marc >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> >>>> _______________________________________________ >>>> Tntnet-general mailing list >>>> [email protected] >>>> <mailto:[email protected]> >>>> https://lists.sourceforge.net/lists/listinfo/tntnet-general >>>> <https://lists.sourceforge.net/lists/listinfo/tntnet-general> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> >>> _______________________________________________ >>> Tntnet-general mailing list >>> [email protected] >>> <mailto:[email protected]> >>> https://lists.sourceforge.net/lists/listinfo/tntnet-general >>> <https://lists.sourceforge.net/lists/listinfo/tntnet-general> >> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Tntnet-general mailing list >> [email protected] >> <mailto:[email protected]> >> https://lists.sourceforge.net/lists/listinfo/tntnet-general >> <https://lists.sourceforge.net/lists/listinfo/tntnet-general> > > > > ------------------------------------------------------------------------------ > > > _______________________________________________ > Tntnet-general mailing list > [email protected] > <mailto:[email protected]> > https://lists.sourceforge.net/lists/listinfo/tntnet-general > <https://lists.sourceforge.net/lists/listinfo/tntnet-general> ------------------------------------------------------------------------------ _______________________________________________ Tntnet-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tntnet-general
------------------------------------------------------------------------------
_______________________________________________ Tntnet-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tntnet-general
