http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52442
Bug #: 52442 Summary: temporary_buffer does not swap Classification: Unclassified Product: gcc Version: 4.6.2 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: giecr...@stegny.2a.pl Created attachment 26792 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26792 the preprocessed file (*.i*) that triggers the bug There is currently no way to use a temporary_buffer to implement a buffer-growing loop as recommended e.g. by gethostname API. The reason is that a temporary_buffer does not swap. the exact version of GCC: 4.6.2 the system type: (SUSE Linux) the options given when GCC was configured/built; COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.6/lto-wrapper Target: x86_64-suse-linux Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.6 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.6 --enable-linux-futex --without-system-libunwind --with-arch-32=i586 --with-tune=generic --build=x86_64-suse-linux Thread model: posix the complete command line that triggers the bug: { gcc -c tmpswap.cpp; } the compiler output (error messages, warnings, etc.): In file included from tmpswap.cpp:1:0: /usr/include/c++/4.6/bits/stl_tempbuf.h: In copy constructor ‘__gnu_cxx::temporary_buffer<char*>::temporary_buffer(const __gnu_cxx::temporary_buffer<char*>&)’: /usr/include/c++/4.6/ext/memory:184:12: instantiated from ‘void std::swap(_Tp&, _Tp&) [with _Tp = __gnu_cxx::temporary_buffer<char*>]’ tmpswap.cpp:7:22: instantiated from here /usr/include/c++/4.6/bits/stl_tempbuf.h:174:7: error: ‘std::_Temporary_buffer<_ForwardIterator, _Tp>::_Temporary_buffer(const std::_Temporary_buffer<_ForwardIterator, _Tp>&) [with _ForwardIterator = char*, _Tp = char, std::_Temporary_buffer<_ForwardIterator, _Tp> = std::_Temporary_buffer<char*, char>]’ is private /usr/include/c++/4.6/ext/memory:184:12: error: within this context In file included from /usr/include/c++/4.6/bits/stl_pair.h:60:0, from /usr/include/c++/4.6/bits/stl_algobase.h:65, from /usr/include/c++/4.6/memory:64, from /usr/include/c++/4.6/ext/memory:62, from tmpswap.cpp:1: /usr/include/c++/4.6/bits/move.h: In function ‘void std::swap(_Tp&, _Tp&) [with _Tp = __gnu_cxx::temporary_buffer<char*>]’: tmpswap.cpp:7:22: instantiated from here /usr/include/c++/4.6/bits/move.h:127:19: note: synthesized method ‘__gnu_cxx::temporary_buffer<char*>::temporary_buffer(const __gnu_cxx::temporary_buffer<char*>&)’ first required here In file included from tmpswap.cpp:1:0: /usr/include/c++/4.6/bits/stl_tempbuf.h: In member function ‘__gnu_cxx::temporary_buffer<char*>& __gnu_cxx::temporary_buffer<char*>::operator=(const __gnu_cxx::temporary_buffer<char*>&)’: /usr/include/c++/4.6/bits/stl_tempbuf.h:177:7: error: ‘void std::_Temporary_buffer<_ForwardIterator, _Tp>::operator=(const std::_Temporary_buffer<_ForwardIterator, _Tp>&) [with _ForwardIterator = char*, _Tp = char, std::_Temporary_buffer<_ForwardIterator, _Tp> = std::_Temporary_buffer<char*, char>]’ is private /usr/include/c++/4.6/ext/memory:184:12: error: within this context In file included from /usr/include/c++/4.6/bits/stl_pair.h:60:0, from /usr/include/c++/4.6/bits/stl_algobase.h:65, from /usr/include/c++/4.6/memory:64, from /usr/include/c++/4.6/ext/memory:62, from tmpswap.cpp:1: /usr/include/c++/4.6/bits/move.h: In function ‘void std::swap(_Tp&, _Tp&) [with _Tp = __gnu_cxx::temporary_buffer<char*>]’: tmpswap.cpp:7:22: instantiated from here /usr/include/c++/4.6/bits/move.h:128:7: note: synthesized method ‘__gnu_cxx::temporary_buffer<char*>& __gnu_cxx::temporary_buffer<char*>::operator=(const __gnu_cxx::temporary_buffer<char*>&)’ first required here