typeof(func!0) != typeof(func!0())

Paul Backus snarwin at gmail.com
Mon Aug 22 16:35:46 UTC 2022


On Monday, 22 August 2022 at 16:06:37 UTC, Andrey Zherikov wrote:
> On Monday, 22 August 2022 at 15:15:22 UTC, Paul Backus wrote:
>> My first instinct is to say that this is the user's mistake. 
>> UDAs are not evaluated like normal expressions, and anyone 
>> using UDAs is going to have to learn that sooner or later.
>
> My feeling was that UDA expression is just an expression that's 
> evaluated at compile time. Am I wrong? Where can I read about 
> the differences between UDA and 'normal' expressions?

A UDA can be either an expression or a symbol. Here are some 
examples of symbol UDAs that are not valid expressions:

```d
import std.stdio;
struct S;
template t() {}

@S           // a type
@(std.stdio) // a module
@t           // a template
int n;
```


More information about the Digitalmars-d-learn mailing list