digitalmars.D.bugs - [Issue 18848] New: std.allocator: Regions are non-copyable, yet are
- d-bugmail puremagic.com (36/36) May 10 2018 https://issues.dlang.org/show_bug.cgi?id=18848
https://issues.dlang.org/show_bug.cgi?id=18848 Issue ID: 18848 Summary: std.allocator: Regions are non-copyable, yet are passed around in examples Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: dlang-bugzilla thecybershadow.net CC: andrei erdani.com Here is an example from std.experimental.allocator.building_blocks.allocator_list.AllocatorList: // Ouroboros allocator list based upon 4MB regions, fetched directly from // mmap. All memory is released upon destruction. alias A1 = AllocatorList!((n) => Region!MmapAllocator(max(n, 1024 * 4096)), NullAllocator); The example features a lambda returning a Region. However, Regions cannot be copied, as they have a destructor which deallocates everything. A comment in the implementation says: /* TODO: The postblit of $(D BasicRegion) should be disabled because such objects should not be copied around naively. */ (That's the only occurrence of BasicRegion in Phobos, so I assume that's just an old name for Region.) Though NRVO may make the verbatim example code behave correctly, it is fragile, and small code modifications e.g. to work around issue 18848 can cause difficult-to-debug problems (due to dangling pointers in other Region instances). --
May 10 2018