I'm not sure I follow the logic behind the const requirement.
The requirement has nothing to do with performance or strict correctness. The fact is that non-const reference parameters should only be used where there is the intention of modifying the argument. With a temporary, such modifications would not be visible when the function returns. Thus, passing a temporary to a function expecting a non-const reference is most likely unintentional and the wrong thing to do. The C++ standard committee thought this sufficient reason to forbid binding non-const references to temporaries. MS thought differently, and later got caught in compatibility concerns.