When trying to get loops to auto-vectorise, I've seen code like this written:

```
void addFP(int N, float *in1, float *in2, float * restrict out)
{
    for (i = 0 ; i < N; i++)
    {
         out[i] = in1[i] + in2[i];
    }
}

```

Where the restrict keyword is needed reassure the compiler about pointer aliases, so that it can vectorise the loop.

Would something like this do the same thing?

```
void addFP(int N, float *in1, float *in2, std::unique_ptr<float> out)
{
    for (i = 0 ; i < N; i++)
    {
         out[i] = in1[i] + in2[i];
    }
}

```

If this does work, which is the more portable choice?

tl;dr Can std::unique\_ptr be used to replace the restrict keyword in a loop you're trying to auto-vectorise?