哪些 WG21 文档解释了在大多数标准库类中不包含引用限定符的决定?
一个可以从这种包含中受益的例子:
template <class C1, class C2>
C1 container_cast(C2&& source)
{
C1 dest;
// if constexpr(can do so) dest.reserve(source.size());
for(auto&& element : std::forward<C2>(source))
{
dest.emplace_back(std::forward<decltype(element)>(element));
}
return dest;
}
但是,没有任何访问容器成员的方法会将右值传播给它们,从而导致不必要的副本。这与例如 std::get(std::tuple) 和 std::optional::operator * 形成对比,后者确实提供了各种重载,包括矛盾的“const &&”。
(与STL 容器的右值引用限定符密切相关,但问题更具体。)