コンパイラ エラー C7688
'
pragma omp atomic
': 想定されているのはスカラー型の式です
解説
OpenMP は、 #pragma omp atomic
コンストラクト内の式をスカラー型に制限します。
コンパイラ エラー C7688 は、Visual Studio 2022 バージョン 17.4 の新機能です。 以前のバージョンのコンパイラでは、コンパイラはエラー C3048 を出力していました。
例
サンプル コードは、 #pragma omp atomic
コンストラクト内の非スカラー型に対して生成された診断を示しています。
// C7688.cpp
// compile using /c /openmp:llvm
struct S { char c; };
S operator+(S, int);
void test()
{
S s1, s2;
#pragma omp atomic capture
{ s1 = s2; s2 = s1 + 1; }
}
/*
When built, the compiler emits:
.\C7688.cpp(10,10): error C7688: '#pragma omp atomic': expected an expression of scalar type
{ s1 = s2; s2 = s1 + 1; }
^
.\C7688.cpp(10,10): note: type is 'S'
*/
この問題を解決するには、 #pragma omp atomic
コンストラクトでスカラー型を使用します。