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