Thread overview
Function without 'this' cannot be 'shared'
Dec 25, 2021
Ruby The Roobster
Dec 25, 2021
Adam D Ruppe
Dec 25, 2021
Ruby The Roobster
December 25, 2021

Take the following code:

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'
December 25, 2021
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.
December 25, 2021
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.