在 C++17 中,这段代码应该产生警告吗?

In C++17 should this code be producing warnings?

如上图所示 link

c++14 模式中的 clang(但不是 c++17 中的)和 c++17 模式中的 GCC 会产生有关排序的警告。 我假设在 C++17 中,= 的 rhs 上的所有内容都在 lhs 之前求值,所以我不确定 gcc 警告是否正确。

Code is:
static int index =0; 
void f(int* pindex){
        pindex[index] = 5;
        pindex[index] = index++;

}
int main(){

}

gcc 警告是:

: 在函数 'void f(int*)' 中:
:4:30: warning: operation on 'index' may be undefined [-Wsequence-point]
4 |         pindex[index] = index++;

  |                         ~~~~~^~
:4:30: warning: operation on 'index' may be undefined [-Wsequence-point]

Compiler returned: 0

注意:我知道标准没有指定任何关于警告的内容,只是在警告中指定问题比谈论序列 point/ordering 保证要容易得多。

此代码可能会在 C++17 之前产生警告,因为它是未定义的行为,但在 C++17 或更高版本中不应产生警告,因为行为已定义:

  1. In every simple assignment expression E1=E2 and every compound assignment expression E1@=E2, every value computation and side-effect of E2 is sequenced before every value computation and side effect of E1 (since C++17)

(Source)

GCC 的警告是一个错误。 (希望这是 唯一 错误,GCC 实际上不会将这种情况视为 UB。)