@safe question

Salih Dincer salihdb at hotmail.com
Sun Jan 9 21:56:05 UTC 2022


On Sunday, 9 January 2022 at 20:58:05 UTC, forkit wrote:
> Do not understand why one line is not considered @safe, but the 
> other is.
>
> //----
>
> module test;
>
> import std;
>
> @safe void main()
> {
>     immutable string[] strings = ["one", "one", "two"];
>
>     immutable(string)*[] pointers = null;
>
>     foreach(size_t i, ref str; strings)
>     {
>         if(str == "one")
>         {
>             //pointers ~= &str; // not allowed in @safe ??
>
>             pointers ~= &strings[i]; // for @safe, I have to 
> revert to using an index into strings.
>         }
>         i++;
>     }
> }
>
> //-----

Try the @trusted and in/out:

```d
auto pro(in immutable string[]   strings,
         out immutable(string)*[] pointers) @trusted {
     foreach(i, ref str; strings)
     {
         if(str == "one")
         {
             //pointers ~= &strings[i]/* ok
             pointers ~= &str;//*/
         }
         /* unnecessary:
         i++;//*/
     }
}

@safe void main()
{
     immutable string[] strings = ["one", "one", "two"];

     immutable(string)*[] pointers = null;

     strings.pro(pointers);

     assert(pointers[0] ==
            &strings[0]); // ok

     assert(pointers[1] ==
            &strings[1]); // ok

}
```


More information about the Digitalmars-d-learn mailing list