IIRC, нестандартное ключевое слово __restrict
(и его варианты) применяется к необработанным указателям (или ссылкам в некоторых реализациях).Умные указатели являются обычными классами с точки зрения компилятора, поэтому вы не можете «ограничивать» их.
Однако, если вам нужно сообщить компилятору, что в некоторой части кода память указывает наИнтеллектуальный указатель доступен исключительно через один объект-указатель, вы можете извлечь ограниченный необработанный указатель из интеллектуального и использовать его вместо:
void f(std::shared_ptr<T>& ptr) {
__restrict T* temp = ptr.get();
// use temp here:
...
}