[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 <boost/ptr_container/ptr_vector.hpp> #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<int*> ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end()); return 0; } Thanks, Jeff
Don't think the last one got through so here goes again: This complies: int i = 1; std::vector<int*> ptrs; std::back_inserter(ptrs) = &i; -----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 <boost/ptr_container/ptr_vector.hpp> #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<int*> ptrs(1, new int(123)); int_ptrs.insert(int_ptrs.end(), ptrs.begin(), ptrs.end()); return 0; } Thanks, Jeff _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ ****************************************************************************** "This message and any attachments are solely for the intended recipient and may contain confidential and privileged information. If you are not the intended recipient, any disclosure, copying, use, or distribution of the information included in this message and any attachments is prohibited. If you have received this communication in error, please notify us by reply e-mail and immediately and permanently delete this message and any attachments. Thank you." Interactive Transaction Solutions Ltd (2473364 England) Registered Office: Systems House, Station Approach Emsworth PO10 7PW ********************************************************************** Ce message �lectronique contient des informations confidentielles � l'usage unique des destinataires indiqu�s, personnes physiques ou morales. Si vous n'�tes pas le destinataire voulu, toute divulgation, copie, ou diffusion ou toute autre utilisation de ces informations, est interdite. Si vous avez re�u ce message �lectronique par erreur, nous vous remercions d'en avertir son exp�diteur imm�diatement par email et de d�truire ce message ainsi que les �l�ments attach�s. Interactive transaction Solutions SAS- France (RCS Pontoise : 489 397 877) Si�ge social : Parc Saint Christophe, 10, Avenue de l�Entreprise 95865 Cergy-Pontoise Cedex ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________
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 <boost/ptr_container/ptr_vector.hpp>
#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<int*> 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<int*> 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 <boost/ptr_container/ptr_vector.hpp>
#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<int*> 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 <boost/ptr_container/ptr_vector.hpp>
#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<int*> 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<T,VoidPtrSeq>::get_const_pointer<Iter>(Iter)' being compiled 1> with 1> [ 1> T=int, 1> VoidPtrSeq=std::vector<void *,std::allocator<void *>>, 1> Iter=std::_Vector_iterator<int *,std::allocator<int *>> 1> ] ... Thanks, Jeff
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 <boost/ptr_container/ptr_vector.hpp>
#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<int*> 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