What is the purpose of restrict in tmpfile_s?

c, c11, restrict, restrict-qualifier

Solution

There are several global variables around that have type `FILE*` such as `stdout` and `stderr` for example. So the leftmost `restrict` clearly indicates that none of these can be returned, the returned `FILE*` doesn't alias with any other. The second `restrict` makes the same guarantee but one level higher, you are not allowed to pass something like `&stderr` in that function. (Well `stderr` is not necessarily a variable in the usual sense, but I hope you see the picture.)

Problem

From C11 draft: C11 (n1570), § K.3.5.1.1 The `tmpfile_s` function `errno_t tmpfile_s(FILE * restrict * restrict streamptr);` What is the purpose of the `restrict` qualifier here? Because there is no other parameters, the compiler is able to know that `streamptr` is not aliased without `restrict`, isn't it?

Original source