cleaner range passing in second version of make_CONTAINER

This commit is contained in:
q66 2017-01-31 19:17:46 +01:00
parent fbdaf77b62
commit 1f83e8c1b0
2 changed files with 4 additions and 5 deletions

View file

@ -30,7 +30,6 @@ struct ranged_traits<std::unordered_map<K, T> const> {
template<typename K, typename T, typename R>
inline std::unordered_map<K, T> make_unordered_map(R range) {
/* TODO: specialize for contiguous ranges and matching value types */
std::unordered_map<K, T> ret;
for (; !range.empty(); range.pop_front()) {
ret.emplace(range.front());
@ -42,11 +41,11 @@ template<typename R>
inline std::unordered_map<
typename RangeValue<R>::first_type,
typename RangeValue<R>::second_type
> make_unordered_map(R range) {
> make_unordered_map(R &&range) {
return make_unordered_map<
typename RangeValue<R>::first_type,
typename RangeValue<R>::second_type
>(std::move(range));
>(std::forward<R>(range));
}
} /* namespace ostd */

View file

@ -37,8 +37,8 @@ inline std::vector<T> make_vector(R range) {
}
template<typename R>
inline std::vector<RangeValue<R>> make_vector(R range) {
return make_vector<RangeValue<R>>(std::move(range));
inline std::vector<RangeValue<R>> make_vector(R &&range) {
return make_vector<RangeValue<R>>(std::forward<R>(range));
}
} /* namespace ostd */