Kinds of containers

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 25 14:06:10 PDT 2015


On 10/25/2015 08:31 PM, Andrei Alexandrescu wrote:
> On 10/23/2015 07:21 PM, bigsandwich wrote:
>> On Friday, 23 October 2015 at 17:44:55 UTC, deadalnix wrote:
>>> On Friday, 23 October 2015 at 11:03:37 UTC, Andrei Alexandrescu wrote:
>>>> [...]
>>>
>>> Sure. We have a problem when it come to collection in the fact that
>>> type qualifier do not turtle down as one would expect.
>>>
>>> [...]
>>
>> Its not just type qualifiers. Containers of derived types have the same
>> problem.  This is also a problem in C++.
>
> This is something easy to live with. In fact, mutable containers are not
> supposed to even convert to containers of base objects. -- Andrei
>

This is true for containers with reference semantics, but not for 
containers with value semantics.

This compiles (D code):

class A{}
class B: A{}

void main(){
     A[2] a;
     B[2] b;
     a=b;
}

This does not compile (C++ code):

class A{};
class B: A{};

int main(){
     vector<A*> a;
     vector<B*> b;
     a=b;
}

However, the conversion would be safe. For persistent and COW 
containers, the copy would even be fast.


More information about the Digitalmars-d mailing list