У меня есть несколько вопросов о std::assignable_from
поведении. Cppreference предлагает следующую реализацию для него:
template< class LHS, class RHS >
concept assignable_from =
std::is_lvalue_reference_v<LHS> &&
std::common_reference_with<
const std::remove_reference_t<LHS>&,
const std::remove_reference_t<RHS>&> &&
requires(LHS lhs, RHS&& rhs) {
{ lhs = std::forward<RHS>(rhs) } -> std::same_as<LHS>;
};
Вопрос в том, какова цель второго требования, т. Е.
std::common_reference_with<
const std::remove_reference_t<LHS>&,
const std::remove_reference_t<RHS>&>
Может кто-нибудь уточнить это требование и привести несколько примеров по нему?
Если контекст имеет значение, я пытаюсь узнать о концепциях C ++ 20 из этого поста . Мой вопрос связан с одним конкретным примером c из него:
template <typename D, std::integral T>
requires std::assignable_from<D, T>
void assign_the_thing(D& dest, T&& x)
{
dest = std::forward<T>(x);
}
Тем не менее, я сомневаюсь, что в любом случае это правильный способ использования assignable_from
.