www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Function without 'this' cannot be 'shared'

reply Ruby The Roobster <michaeleverestc79 gmail.com> writes:
Take the following code:

```d
void main() //Can be empty, problem occurs regardless
{
}

int test(int a) //Test function.
{
    return 3 * a;
}
//Now overload it for shared...
int test(shared int a) shared
{
     return cast(shared(int))test(cast(int)a); //Note:  The 
problem still happens regardless whether you have this line or 
not.
}
```

Compiling on the latest version, the compiler output you get 
should be(assuming the file is named test.d):

```
Error:  function 'test.test' without 'this' cannot be 'shared'
```
Dec 25 2021
parent reply Adam D Ruppe <destructionator gmail.com> writes:
On Saturday, 25 December 2021 at 19:46:20 UTC, Ruby The Roobster 
wrote:
 int test(shared int a) shared
What do you expect that second shared to do? Generally qualifiers after the parenthesis apply to the hidden `this` parameter, and since there isn't one that's why it is failing. If you wanted it to apply to the return value, you write that shared(int) test() {} and if you wanted something else, well it depends on what you wanted.
Dec 25 2021
parent Ruby The Roobster <michaeleverestc79 gmail.com> writes:
On Saturday, 25 December 2021 at 20:03:49 UTC, Adam D Ruppe wrote:
 On Saturday, 25 December 2021 at 19:46:20 UTC, Ruby The 
 Roobster wrote:
 int test(shared int a) shared
What do you expect that second shared to do? Generally qualifiers after the parenthesis apply to the hidden `this` parameter, and since there isn't one that's why it is failing. If you wanted it to apply to the return value, you write that shared(int) test() {} and if you wanted something else, well it depends on what you wanted.
Thank you. It now works.
Dec 25 2021