Martin Sebor wrote: > Have these changes been applied? (Sorry, I'm behind on email...)
No. I merged these differences with current test implementation and updated it to use StringCaseTestData. The final diff is here: http://people.apache.org/~antonp/stdcxx06062006/ Is ok for commit ? Thanks, Anton Pevtsov -----Original Message----- From: Martin Sebor [mailto:[EMAIL PROTECTED] Sent: Tuesday, June 06, 2006 01:55 To: [email protected] Subject: Re: test for lib.string.swap Anton Pevtsov wrote: > The updated test version is here: > http://people.apache.org/~antonp/stdcxx05192006/ > > Now it exercises the swap when strings allocators are different. Also > I made small change to 21.strings.cpp to correct info string format. Have these changes been applied? (Sorry, I'm behind on email...) Martin > > With best wishes, > Anton Pevtsov > > > -----Original Message----- > From: Martin Sebor [mailto:[EMAIL PROTECTED] > Sent: Friday, May 19, 2006 02:04 > To: [email protected] > Subject: Re: test for lib.string.swap > > > Anton Pevtsov wrote: > [...] > >>Here is another question. We use template class Allocator in the >>tests, and it assumes that code should be valid for std:allocator too. > > >>But >> >>SharedAlloc a; >>Allocator<int> z (&a); >> >>wll not compile when Allocator is std::allocator. Is there any way to >>use std::allocator and UserAlloc together (at the same time UserAlloc >>objects should be not equal)? > > > Yeah, that wouldn't work. There are at least two approaches that I > think should work for us. > > The first is to unconditionally construct a SharedAlloc object and set > SharedAlloc::instance() to point to it. That way the default UserAlloc > ctor will pick it up. > > template <..., class Allocator> > void foo () { > SharedAlloc a; > // set a as the new global instance > SharedAlloc* const save = SharedAlloc::instance (&a); > Allocator z; // uses a > // ... > // restore the original instance > SharedAlloc::instance (save); > } > > The second is to write a simple allocator adapter template that would > pass the SharedAlloc object to the UserAlloc ctor but avoid passing it > to Allocator: > > template <class charT> > std::allocator<charT> > make_alloc (SharedAlloc&, std::allocator<charT>*) { > return std::allocator<charT>(); > } > > template <class charT, class Types> > UserAlloc<charT, Types> > make_alloc (SharedAlloc &shal, UserAlloc<charT, Types>*) { > return UserAlloc<charT, Types>(&shal); > } > > I suspect the second alternative is what we'll need to verify that the > string ctor creates and stores a copy of the allocator object passed > to it rather than storing some other default constructed allocator > (since the two would be indistinguishable). > > Martin >
