
AMDG Ion GaztaƱaga <igaztanaga <at> gmail.com> writes:
You are right. I'm returning the address of a temporary! I think conceptually the iterator is wrong. I should return char & for operator*() instead of char *. char *should be returned by operator->.
However this makes the code uglier:
multiallocation_iterator it = ...
for(...) //placement new new(&*it++) T();
instead of
for(...) //placement new new(*it++) T();
If I want basic_multiallocation_iterator to be a well-formed iterator I need to define operator->() so I think I'll need to change the interface of this class (I doubt anyone is using it). Give me some time to change it and pass the tests again.
It isn't /necessary/. template<class T, class pointer> struct arrow_proxy { arrow_proxy(const T& t) : impl(t) {} pointer operator->() const { return(&impl); } T impl; } arrow_proxy<value_type, pointer> operator->() { return(arrow_proxy<value_type, pointer>(**this)); } In Christ, Steven Watanabe