What is the difference between enum and shared immutable?

Ali Çehreli acehreli at yahoo.com
Thu Oct 29 20:28:26 UTC 2020

On 10/29/20 10:16 AM, H. S. Teoh wrote:

 > Module-level immutable can be initialized either as part of the
 > declaration:
 > 	immutable int x = 1;

To add, the expression can be a call to a function that need not return 
immutable, as long as it is pure, which can be inferred by the compiler 
for templates. Phew! :)

pure char[] makeMutableString() {
   return "hello".dup;

// This works because makeMutableString() is 'pure', i.e. 'i' cannot
// share mutable data.
immutable i = makeMutableString();

void main() {

So, instead of adding 'pure' to makeMutableString() like above, one can 
add another set of parethesis to make it a template. (Two characters 
instead of four! Win! :p)

char[] makeMutableString()() {
   return "hello".dup;


More information about the Digitalmars-d-learn mailing list