Это NRVO, а не RVO.
Вот правило, которое допускает NRVO (class.copy / 31):
в операторе возврата в функции с классом тип возврата, когда выражение является именем энергонезависимого автомата c объект (отличный от параметра функции или оператора catch) с тем же типом cv-unqually, что и тип, возвращаемый функцией, Операция копирования / перемещения может быть опущена путем создания объекта автоматизированного c непосредственно в возвращаемое значение функции
Как вы можете видеть, в случае (a)
выражение не является именем ( из-за добавленной круглой скобки), поэтому NRVO не допускается.