Opérateur C + = Point de séquence?

Est-ce que ce comportement est défini?

*p += *p--; 

Et, si c’est le cas, est-il équivalent à { p[0] += p[0]; --p; } { p[0] += p[0]; --p; } { p[0] += p[0]; --p; } ou à { p[-1] = p[0]; --p; } { p[-1] = p[0]; --p; } { p[-1] = p[0]; --p; } ?

J’imagine que l’être défini ou non dépend de si += a un sharepoint séquence implicite et, si c’est le cas, je suppose que le deuxième bloc devrait être le bon.

EDIT: Je pense que ce n’est pas un doublon de la question suggérée, car la question principale est de savoir quels sont les points de séquence et quel est le comportement affectif. Dans mon cas, j’ai une idée claire de ce qu’est un sharepoint séquence et la question est de savoir si l’opérateur += a un sharepoint séquence implicite ou non.

C’est un comportement indéfini car l’évaluation de *p n’est pas séquencée en relation avec l’évaluation de *p-- . Il n’y a pas de sharepoint séquence. Pour tous les opérateurs d’affectation, 6.5.16:

L’effet secondaire de la mise à jour de la valeur stockée de l’opérande gauche est séquencé après les calculs de valeur des opérandes gauche et droit. Les évaluations des opérandes ne sont pas séquencées.

6.5 déclare que c’est UB:

Si un effet secondaire sur un object scalaire n’est pas séquencé par rapport à un effet secondaire différent sur le même object scalaire ou à un calcul de valeur utilisant la valeur du même object scalaire, le comportement est indéfini. S’il existe plusieurs classements autorisés des sous-expressions d’une expression, le comportement n’est pas défini si un tel effet secondaire non séquencé se produit dans l’un des classements.