How can overloads be distinguished on attributes alone?
    Quirin Schroll 
    qs.il.paperinik at gmail.com
       
    Mon Jul 31 10:55:44 UTC 2023
    
    
  
Apparently, functions can be overloaded solely distinguished by 
attributes:
```d
void f(ref int x) pure { x = 1; }
void f(ref int x)      { x = 2; static int s; ++s; }
```
I thought that, maybe, a `pure` context calls the `pure` function 
and an impure context calls the impure function, but no: Calling 
`f` leads to an ambiguity error in both contexts. Even if that 
worked, what about inferred contexts, i.e. templates? In simple 
cases, they could forward the contexts in which they are called, 
but you can instantiate a template without calling it.
What am I missing here?
    
    
More information about the Digitalmars-d-learn
mailing list