Предупреждение C6395
%variable% имеет незасекреченные операции чтения и /или записи до C++17; Изменение стандарта языка может изменить поведение кода.
Замечания
C++17 сделал порядок оценки определенных выражений более строгим. MSVC соответствовала требованиям, изменив порядок оценки для некоторых выражений. Таким образом, изменение языковой версии может изменить наблюдаемое поведение программы. Эта проверка позволяет диагностировать некоторые из случаев изменения кода из-за переключения языковых версий.
Имя анализа кода: EVAL_ORDER_CHANGE
Пример
void foo(int* a, int i)
{
a[++i] = i; // Warning: 'i' has unsequenced reads and/or writes before C++17; changing the language standard might change the behavior of the code
}
Чтобы решить эту проблему, разделите побочные эффекты от остальной части выражения, чтобы правильно определить порядок оценки:
void foo(int* a, int i)
{
++i;
a[i] = i; // No warning.
}