Ну, насколько мне известно, ключевое слово restrict является расширением, введенным Microsoft для C ++ AMP. Ключевое слово будет поддерживаться компилятором Visual Studio C ++, который поставляется после Visual Studio 2010.
В настоящее время я не знаю о бета-версии 2012 года, поэтому я предполагаю, что вы нашли примеры, блоги и т. Д., Описывающие новый C ++ AMP, и пытаетесь увидеть, как он работает для себя, но с Visual Studio 2010.
Компилятор C ++, который поставляется с Visual Studio 2010, однако, насколько я знаю, не поддерживает ключевое слово restrict. Вот почему вы получаете ошибку.
Так что я думаю, что для C ++ AMP нам придется немного подождать бета-версию VS2012, пока мы не сможем поиграть с ней. Мои пальцы, конечно, тоже чесались, когда я увидел демо от Daniel Moth на 9-м канале: -) ... Не то чтобы мне нужен C ++ AMP в моей повседневной работе, но это выглядит довольно интересно (играю).
РЕДАКТИРОВАТЬ1: На самом деле я посмотрел вокруг, и кажется, что есть
Выпуск "Visual Studio 11 Developer Preview", где C ++ AMP, кажется, доступен (библиотека, и я предполагаю также компилятор C ++ с реализованными расширениями).
EDIT2 Теперь, снова глядя на ваше сообщение об ошибке, может показаться, что вы используете VS11 (я сделал это предположение на основе пути к файлу включения (он содержит Microsoft Visual Studio 11.0 :-)). Может быть, вы должны попытаться указать режим захвата лямбды для захвата по значению и сделать его изменяемым, как это:
[=](index<2> i) mutable restrict(direct3d) {}
По крайней мере, так написано лямбда в большинстве примеров C ++ AMP ...