libstdc++ of g++ 3.4.x: std::swap and std::auto_ptr causes compilation errors
Paolo Carlini
pcarlini@suse.de
Tue Nov 16 09:46:00 GMT 2004
Vinzenz Feenstra wrote:
> std::swap of 3.4
> template<typename _Tp>
> inline void
> swap(_Tp& __a, _Tp& __b)
> {
> // concept requirements
> __glibcpp_function_requires(_SGIAssignableConcept<_Tp>)
> const _Tp __tmp = __a; // <-- this is the problem in my opinion
> __a = __b;
> __b = __tmp;
> }
Yes, you are right that this is the ""problem"", in the sense that, being
auto_ptr not Assignable, later, in __b = __tmp, its assignment operator
wants a *non* constant reference. We (I) could revert the change which
const-ified, correctly, the temporary, but the fundamental problem of
your testcase would remain the same: try compiling it passing,
-D_GLIBCXX_CONCEPT_CHECKS
on 3.4 or
-D_GLIBCPP_CONCEPT_CHECKS
on 3.3 (this actually enables the concept check encoded in the
__glibcpp_function_requires line)
Paolo.
More information about the Libstdc++
mailing list