描述原始指针(指向对象)的概念的正确实现是什么?

What would be the proper implementation of a concept describing a raw pointer (to objects)?

这可能仅供学术参考。

因为我注意到我的实际例子可能不适合提出这个问题。

原来我写的是这样的

auto bak_ptr{ptr}; // think of an `int* ptr`

备份一个地址。 现在我想知道我是否可以通过用更有意义、视野开阔的 C++20 概念替换那个愚蠢的 auto 来做得更好。

经过深思熟虑,在那个具体例子中正确的选择可能只是

std::copyable auto bak_ptr{ptr};

因为那反映了备份的意图,一些东西的副本。

但剩下的学术问题是:什么是正确映射原始指针概念行为的正确(概念标准库)实现?如果有必要,让我们将 'pointer' 限制为指向对象的指针。还有指向 void、函数、成员的指针 - 可能会使问题复杂化。

我想到了与迭代器的关系。希望不会再次正确回答我自己的问题:std::contiguous_iterator 在某些情况下会是一个有价值的选择吗? 有人可以就该主题分享或多或少完整的专家观点吗?

为什么可能还没有 std::pointer_to_object 标准库实现这个概念(当着你的面大喊大叫)?

只是建立在std::is_pointer之上

应该没什么问题
template <class T>
concept pointer =
  std::is_pointer_v<T>;

感谢 @cigien 的想法。

我要说的是,在简单的备份示例中,选择 std::copyable 是完全正确的。由于这就是您要对备份执行的操作,因此请通过复制再次将其恢复。

表明 bak_ptr 是原始的 pointer-to-object 不需要任何花哨的恶作剧:

auto* bak_ptr{ptr};