On 1/10/23 7:55 AM, Adam D Ruppe wrote:
On Sunday, 8 January 2023 at 18:42:58 UTC, Salih Dincer wrote:
I'm wondering 2 things; firstly, does having an enum mean there is no auto-return? Or could it be CTFE?

It means nothing. The keyword tells the parser a function is about to begin, which triggers return type inference (exactly the same as `auto`), but otherwise it is completely ignored.

Mostly correct. `enum` is a storage class, which means a *declaration* is about to begin. Once the declaration is decided as a function definition, type inference is performed, and the storage class is checked to see how it affects the declaration. In some cases, there is an effect, in some there is not.

```d
static foo() {} // static does nothing here
final bar() {} // final does nothing here
enum baz() {} // enum does nothing here
__gshared fun() {} // __gshared does nothing here

struct S
{
   // return type is int *, `this` (unused) is const
   const foo() { return new int; }
   // same for immutable, shared, inout
}
```

Aside from the const/immutable/shared/inout storage classes (which do affect semantics, but maybe in slightly confusing ways) there are some which are pretty obvious and also work with type inference:

1. deprecated
2. extern
3. abstract
4. override
5. synchronized
6. auto
7. scope
8. nothrow
9. pure
10. ref

-Steve

Reply via email to