C++ std::pointer\u traits返回的指针是否为<;Ptr>;::指针\u是否要与分配器返回的指针进行比较?

C++ std::pointer\u traits返回的指针是否为<;Ptr>;::指针\u是否要与分配器返回的指针进行比较?,c++,c++11,pointers,allocator,C++,C++11,Pointers,Allocator,我想知道静态成员函数返回的指针 std::pointer_traits<Ptr>::pointer_to(element_type& o); std::pointer\u traits::pointer\u to(元素类型&o); 应与分配对象时分配器返回的指针进行比较。下面的代码说明了这个问题。在一般情况下,主函数是返回1还是0 std::pointer_traits<Ptr>::pointer_to(element_typ

我想知道静态成员函数返回的指针

std::pointer_traits<Ptr>::pointer_to(element_type& o);                 
std::pointer\u traits::pointer\u to(元素类型&o);
应与分配对象时分配器返回的指针进行比较。下面的代码说明了这个问题。在一般情况下,主函数是返回1还是0

std::pointer_traits<Ptr>::pointer_to(element_type& o);                 
int main()
{

  using AT = std::allocator_traits<Allocator>;
  using Ptr = AT::pointer;
  using PT = std::pointer_traits<Ptr>;

  Allocator alloc;

  auto p1 = AT::allocate(alloc, 1);
  AT::construct(alloc, p1, 20); 

  auto p2 = PT::pointer_to(*p1);

  if (p1 != p2)
    return 1;

  // Destruct and deallocate p1 here.
  return 0;
} 
intmain()
{
使用AT=std::分配器_特征;
使用Ptr=AT::pointer;
使用PT=std::pointer\u特征;
分配程序alloc;
自动p1=AT::分配(alloc,1);
AT::构造(alloc,p1,20);
自动p2=PT::指向(*p1)的指针;
如果(p1!=p2)
返回1;
//在这里销毁并释放p1。
返回0;
} 
我的观点是,我不理解静态函数如何能够有足够的信息来初始化一个只给定一个对象引用的奇特指针的所有内部状态。另一方面,指向同一个对象的指针比较不相等是非常奇怪的

std::pointer_traits<Ptr>::pointer_to(element_type& o);                 

我在实现指向分配器的奇特指针时遇到了这个问题,而分配器的指针无法从静态函数正确初始化。它需要内部分配器信息(类似于需要指向容器内部指针表的指针的
std::deque
迭代器)

似乎甚至不需要自定义分配器为自定义
指针
类型提供
指针
专门化,也不需要为
实现提供
指针::指针。换句话说,
PT::指针指向(*p1)可能格式不正确。@IgorTandetnik如果我的花式指针没有提供指向它的指针,\u如果容器调用此函数,则会导致编译器错误。看见所以,听起来我必须提供这个函数,但实际上,文档只提到它的返回只是一个可取消引用的指针,而不是一个强语句。然而,我不能断定它的格式是否正确。我看不到标准中有任何地方允许容器依赖于指向
指针。使
指针指向
工作不属于[allocator.requirements]的一部分。据我所知,如果C++库实现有一个容器,它依赖于 PoTeTime> 格式良好,这样的实现是不符合的。
std::pointer_traits<Ptr>::pointer_to(element_type& o);