ラッパー関数を作成する場合、値渡しと参照渡し、どちらの方法が一般的なのでしょうか?

void append(T o) { vector.push_back(o); }
void append(const T& o) { vector.push_back(o); }

boostのコードで値渡しの方法を見かけたのですが、
(http://www.boost.org/doc/libs/1_60_0/boost/assign/std/vector.hpp)

push_back内で行われるコピーを考えると二重のコピーになってしまう気がします。
参照を使わない方法にはなにか意図的な物があるのでしょうか。
またはC++では値渡しが基本ということなのでしょうか。