相关疑难解决方法(0)

std::assignable_from 可能实现背后的基本原理

我有几个关于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>;
  };
Run Code Online (Sandbox Code Playgroud)

问题是第二个要求的目的是什么,即

std::common_reference_with<
    const std::remove_reference_t<LHS>&,
    const std::remove_reference_t<RHS>&>
Run Code Online (Sandbox Code Playgroud)

谁能详细说明这个要求并提供一些例子吗?

如果上下文很重要,我会尝试从这篇文章中了解 C++20 概念。我的问题与其中的一个具体示例有关:

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);
}
Run Code Online (Sandbox Code Playgroud)

但是,无论如何,我怀疑这是否是正确的使用方法assignable_from

c++ c++-concepts c++20

7
推荐指数
1
解决办法
496
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1