Are not the literals 1, 2, 3 const rvalues?
Нет, это просто значения типа int. Согласно стандарту C ++ значения r примитивных типов не могут быть константно-квалифицированными.
Вызов не удался, потому что они rvalues - неконстантные ссылки не могут быть связаны с rvalues.
Вызов будет в порядке, если функции получат const A1 &, const A2&, const A3&
, но в этом случае функция не сможет изменять аргументы.
Редактировать: Ссылка на мое первое утверждение из стандарта C ++ 2003: (3.10.9)
Класс rvalues может иметь квалификацию cv
типы; неклассовые значения всегда имеют
CV-неквалифицированные типы. Rvalues должен
всегда есть полные типы или пустота
тип; в дополнение к этим типам,
Значения также могут быть неполными
типы.