What is that "enum function" supposed to be ?

Elmar chrehme at gmx.de
Mon Jul 19 21:16:57 UTC 2021


Hello D people,

I stumbled upon a weird thing which I don't find in the language 
documentation. The compiler allows me to define `enum functions` 
with `enum` keyword instead of `auto` keyword. It gets more 
weird. It seems like being an actual `auto` function with the 
only difference that it doesn't allow `const` or `immutable` but 
`inout` qualifier in `enum`-methods.

```
struct S {
	enum barz(int x) {  // fine
		return x;
	}
	enum foo(int x) inout {  // fine
		return x;
	}
	// can't use 'enum' with those
	auto foox(int x) const inout {
		return x;
	}
	auto bar(int x) const {
		return x;
	}
	auto baz(int x) immutable {
		return x;
	}
}
```

I'd like to know:
- What does return type `enum` mean?

   It's definitely not compile-time-static here and it's 
definitely not required to be assigned to an enum (`auto` works 
as well).

- What is the difference to using `auto` as return value ?

- Why is there no shortform template syntax for enums? I have to 
write it like this:

```
template MyEnum(X) {
	enum MyEnum {
		a = X,
		b, c, d
	}
}
```

Regards!


More information about the Digitalmars-d mailing list