Subject: Re: [boost] [containers] Clarifications on incomplete type support?
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2014-09-22 11:28:34
El 21/09/2014 23:19, Mikael Persson escribió:
> I cannot stress enough how important it is for data structure designs to be
> able to instantiate the iterators of containers of incomplete value types!
> And, in general, there is no inherent reason why, in general, incomplete
> type support could not extend to iterators as well. This is even more true
> in light of the SCARY iterator requirements (which boost containers purport
> to support, which cannot possibly be true given the compilation errors I
> have seen).
> So, my main question is this: Is the following code supposed to work when
> using Boost.Containers?
> boost::container::some_container<IncompleteType>::iterator it;
There was no requirement for that. Only for the container itself.
> The documentation only states that "all Boost.Containers containers [..] are
> designed to support incomplete types". This needs to be clarified when it
> comes to iterators, at least.
> If the above code is not guaranteed to work, then may I request that it be
> added to the requirements? Because in my view, not having iterator support
> for incomplete types sort of defeats the whole purpose of supporting
> incomplete types, except for the most trivial use-cases (like those
> "recursive containers" examples). And moreover, without this support,
> workarounds are so major that they won't benefit from the container's
> support for incomplete types any more (and therefore, might as well use the
> standard ones instead).
I didn't have that need in the past, I used containers of incomplete to
define recursive containers or like PIMPL-like idiom. If defining
iterator type is desired, I see no problem in supporting that. The
does not mention iterators.
>>From experience, I know that most Boost.Container containers had working
> iterators for incomplete value types up to and including version 1.54 (and
> it's a kind of natural consequence of supporting incomplete types for the
> container itself). But recently, changes to the boost::container::list
> class have made it impossible to use of boost::container::list iterators
> for incomplete types (due to some convoluted new iterator scheme that I can
> barely understand myself). If iterators are supposed to be included in the
> incomplete type support, then this is a bug in the list container (and btw,
> boost::unordered_set also has the same problem), and I would also recommend
> adding this to the container unit-tests.
I've seen your pull request, thanks. I will review it and try to add
support for iterators to incomplete types. And yes, containers of
incomplete types (including iterators) should be better tested in the
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk