Possible Duplicate:
How come a non-const reference cannot bind to a temporary object?
First up, I understand that the standard mandates that temporaries can only be bound to const references, and, as I understand it, in this case the lifetime of the temporary is bound to the lifetime of the reference.
Other than "because the standard says so..." why is it such a good idea to prevent temporaries being bound to general (i.e. non-const) references??
Consider the following, where we have a routine that requires some workspace:
void foo(std::vector<mytype> &data, std::vector<mytype> &work)
{ // we do something to DATA but we need to use the workspace WORK
  // we may resize WORK, write to it, generally use it in a non-const way
  // we want to pass WORK as a parameter because we want to have the option
  // of pre-allocating it (for efficiency, FOO may, but is not always, called
  // inside a loop)
}
Why would it be so evil to make an isolated call to foo as follows:
// case 1
// DATA already created elsewhere
foo(data, std::vector<mytype>() );
Of course we could do something like this:
// case 2
// DATA already created elsewhere
std::vector<mytype> work;
foo(data, work);
But then the lifetime of work is extended until the end of the enclosing block, which can be unwanted.
I know that there are ways to work around this kind of thing, but case 1 here would be a neat way of doing things, except we're not allowed.