[pointer_container] and std::back_inserter

Are pointer_container's intended to be compatible with
std::back_inserter? I've also tried calling insert and assign.
I've tried:
#include

Don't think the last one got through so here goes again:
This complies:
int i = 1;
std::vector

Patrick Loney wrote:
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Jeff Flinn Sent: 27 March 2008 16:46 To: boost-users@lists.boost.org Subject: [Boost-users] [pointer_container] and std::back_inserter
Are pointer_container's intended to be compatible with std::back_inserter? I've also tried calling insert and assign.
I've tried:
#include
#include <iterator> #include <vector> #include <memory>
int main() { boost::ptr_vector<int> int_ptrs;
*std::back_inserter(int_ptrs) = new int(123); *std::back_inserter(int_ptrs) = std::auto_ptr<int>(new int(456));
std::vector
ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end());
return 0; }
Don't think the last one got through so here goes again: This complies:
int i = 1; std::vector
ptrs; std::back_inserter(ptrs) = &i;
The problem is with using std::back_inserter with a pointer_container, such as ptr_vector, not with a std::vector of int pointers. Thanks, Jeff

Jeff Flinn skrev:
Are pointer_container's intended to be compatible with std::back_inserter? I've also tried calling insert and assign.
no, that would be a pure co-incidence. In the trunk you can find equivalents in ptr_inserter.hpp (attached)
I've tried:
#include
#include <iterator> #include <vector> #include <memory>
int main() { boost::ptr_vector<int> int_ptrs;
*std::back_inserter(int_ptrs) = new int(123); *std::back_inserter(int_ptrs) = std::auto_ptr<int>(new int(456));
std::vector
ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end());
Is it this last line that bothers you? Or do you want to go in the other direction? -Thorsten

Thorsten Ottosen wrote:
Jeff Flinn skrev:
Are pointer_container's intended to be compatible with std::back_inserter? I've also tried calling insert and assign.
no, that would be a pure co-incidence.
In the trunk you can find equivalents in ptr_inserter.hpp (attached)
Will this be in 1.35.0?
I've tried:
#include
#include <iterator> #include <vector> #include <memory>
int main() { boost::ptr_vector<int> int_ptrs;
*std::back_inserter(int_ptrs) = new int(123); *std::back_inserter(int_ptrs) = std::auto_ptr<int>(new int(456));
std::vector
ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end());
Is it this last line that bothers you? Or do you want to go in the other direction?
The last line does not bother me, it bothers VC8:
1>f:\boost\boost_1_34_1\boost\ptr_container\ptr_sequence_adapter.hpp(112)
: error C2440: 'return' : cannot convert from 'int **' to 'const int *'
1> Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
1>
f:\boost\boost_1_34_1\boost\ptr_container\detail\reversible_ptr_container.hpp(99)
: see reference to function template instantiation 'const int
*boost::ptr_container_detail::sequence_config

Jeff Flinn skrev:
Thorsten Ottosen wrote:
Jeff Flinn skrev:
Are pointer_container's intended to be compatible with std::back_inserter? I've also tried calling insert and assign. no, that would be a pure co-incidence.
In the trunk you can find equivalents in ptr_inserter.hpp (attached)
Will this be in 1.35.0?
No.
I've tried:
#include
#include <iterator> #include <vector> #include <memory>
int main() { boost::ptr_vector<int> int_ptrs;
*std::back_inserter(int_ptrs) = new int(123); *std::back_inserter(int_ptrs) = std::auto_ptr<int>(new int(456));
std::vector
ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end()); Is it this last line that bothers you? Or do you want to go in the other direction?
The last line does not bother me, it bothers VC8:
use insert( v.end(), make_indirect_iterator(ptrs.begin()), make_indirect_iterator(ptrs.end() ); -Thorsten
participants (3)
-
Jeff Flinn
-
Patrick Loney
-
Thorsten Ottosen