Вам нужен «ограниченный указатель на целое число» int * restrict p
, а не «указатель на ограниченное целое число» restrict int *p
, поэтому вам нужно будет сделать еще один typedef.Вы не можете «добраться до» оригинала.
РЕДАКТИРОВАТЬ: Хотя это правда, что вы не можете достичь внутри typedef, и модификатор всегда будет применяться на верхнем уровне, вв этом случае оказывается, что вы хотите restrict
на верхнем уровне.Это обратное тому, с чем люди обычно сталкиваются с const
: typedef char *char_ptr
означает const char_ptr
(или char_ptr const
, они эквивалентны) и означают «постоянный указатель на символ», а не «указатель на постоянный символ», чтолюди хотят.(См. Также эту ветку SO: C ++ typedef интерпретация указателей const )
Так что в этом случае я думаю, что typedef int *pt
означает, что restrict pt
означает int * restrict pt
.Это довольно легко проверить, потому что gcc будет жаловаться на «недопустимое использование« restrict »для restrict int *x
, но не для restrict pt x
.