Согласно C ++ Standard 2003:
An lvalue (3.10) of a non-function, non-array type T can be converted to an rvalue.
Что означает, что массив и функция не могут быть преобразованы в rvalue?
Типы функций и массивов рассматриваются в следующих разделах (4.2, 4.3).
Значение l или значение типа «массив из N T» или «массив с неизвестной границей из T» может быть преобразовано в значение r типа «указатель на T». Результатом является указатель на первый элемент массива. (...) Значение l типа функции T может быть преобразовано в значение типа «указатель на T». Результатом является указатель на функция.
Значение l или значение типа «массив из N T» или «массив с неизвестной границей из T» может быть преобразовано в значение r типа «указатель на T». Результатом является указатель на первый элемент массива.
(...)
Значение l типа функции T может быть преобразовано в значение типа «указатель на T». Результатом является указатель на функция.