You need a "restricted pointer to integer" int * restrict p
not a "pointer to restricted integer" restrict int *p
so you will need to make another typedef. You can't "reach inside" the original one.
EDIT: While it's true that you can't reach inside the typedef and the modifier will always apply at the top level, in this case it turns out that you want the restrict
at the top level. It's the inverse of what people usually run into with const
: typedef char *char_ptr
means const char_ptr
(or char_ptr const
, they're equivalent) both mean "constant pointer to char" not "pointer to constant char" which is what people want. (See also this SO thread: C++ typedef interpretation of const pointers )
So in this case I think typedef int *pt
does mean that restrict pt
means int * restrict pt
. It's pretty easy to verify because gcc will complain about "invalid use of 'restrict'" for restrict int *x
but not for restrict pt x
.