Временное значение не является постоянным:
C(); // not const
Если вы хотите обращаться к нему постоянно, разыграйте его:
f(static_cast<const C&>(C()));
Дело в том, что объект, функция-член которого (здесь оператор преобразования) вызывается, не является константой. Это не имеет ничего общего с результатом преобразования.
Результат не обязательно должен быть постоянным. Предположим, мы добавили еще один класс:
class D { };
class C {
// ...
operator D() { return D(); }
};
int main()
{
D d;
static_cast<D>(C()) = d; // OK: assign d to the result of the conversion
// static_cast<int>(C()) = 6; // Error: left-hand side is not an lvalue
}