私がコーディングしているプログラムでは、関数宣言の1つは次のようになります。
bool parse( const sentence & __restrict sentence )
{
// whatever
}
Microsoft Visual Studio 2010 Expressを使用してコードをコンパイルすると、コンパイラは次のように文句を言います。
警告C4227:時代錯誤が使用されました:参照の修飾子は無視されます
ただし、GCCのドキュメントのこのページには次のように書かれています。
制限付きポインターを許可することに加えて、制限付き参照を指定できます。これは、参照がローカルコンテキストでエイリアス化されていないことを示します。
そして同じページは非常に明確な例を示しています:
void fn (int *__restrict__ rptr, int &__restrict__ rref)
{
/* ... */
}
MVSCの警告を誤解しましたか?または、すべての参照をポインターに変換して、それが__restrict
適用されるようにする必要がありますか?