Additional type information

Volodymyr via Digitalmars-d digitalmars-d at
Mon Mar 16 10:21:08 PDT 2015

"const" and "ref" actually don't change type but add(remove?) 
some constraints. They are somthing like tags on type. Extended 
tags system can add more constraints! E. g. to manage objects 
allocated using different allocators and prevent minxing memory 
operations based on different allocators:

@allocatedBy(GCAllocator) auto a = new Widget;
auto b = new Widget; // deduce @allocatedBy(GCAlloactor)

@allocatedBy(Mallocator) auto c = // allocate array on OS heap
c ~= [3, 4, 5]; // Error! Allocator don't match. This operator 
use GC
// Or even more:
c ~= [3, 4, 5]; // extend array using Mallocator

These tags may be created by user, cooperate with annotations on 
functions or types (they are annotations), be removed or added 
with "cast", take part in overloading, apply automatic deduction 
for itself. It is compile time type informaion that can be used 
if needed and ommited if not.

So how about the thing?

More information about the Digitalmars-d mailing list