Почему жетоны, заключенные в круглые скобки, не являются выражениями r-value?

Рассмотрим следующий код:

#include <iostream>

struct Foo
{
  Foo() : bar( 0 ) {}

  int bar;
};


int main()
{
  Foo foo;

  ++(foo.bar);

  std::cout<< foo.bar << std::endl;

  system("pause");
  return 0;
};

Почему foo.bar оценивается в 1?

Разве скобки в (foo.bar) не создают неопределенное выражение (r-value), которое затем увеличивается?

Ответ 1

Поскольку стандарт явно указывает, что в пункте 3.4.2 параграф 6:

Обозначенное в скобках выражение является первичным выражением, тип и значение идентичны значениям прилагаемого выражения. Наличие круглых скобок не влияет на то, является ли выражение lvalue.

внимание мое.

Ответ 2

Нет, скобки не имеют никакого значения, кроме изменения порядка операций.

Чтобы создать rvalue, вам нужно использовать специальную функцию std::move(x).