g++4.1.2 boost1.35.1-5 で boost::algorithm::trim なんだけど

vector<string> vecstr; に適当に値を代入して

trim( vecstr[0] );
だとダメ(trim.hpp:229 で no much function.)で
trim( vecstr.at(0) );
もダメだけど

string tmp =vecstr[0];
trim( tmp );
だと通ってしまう。これらってC++的には同じでないの?
(atは領域外だと例外投げるとかをのぞいて)