Erro: lvalue necessário neste código C simples? (Ternário com atribuição?)

Eu tenho

#include<stdio.h>

int main()
{
 int a=5,b=6;
 (a>b)?b=a:b=b;    // Here is the error
 return 0;
}

Mas se eu substituir:

(a>b)?b=a:b=b;       // Error
with   
(a>b)?(b=a):(b=b);   // No-Error

Eu entendo olvalue é um valor ao qual algo pode ser atribuído e como é diferente dervalue, mas por que oextra parenthesis fazendo a diferença

questionAnswers(4)

yourAnswerToTheQuestion