gpt4 book ai didi

c++ - 指向 volatile 的指针的迭代器特征

转载 作者:行者123 更新时间:2023-12-05 05:43:26 28 4
gpt4 key购买 nike

这段代码

#include <iterator>
#include <type_traits>

static_assert(std::is_same_v<typename std::iterator_traits<volatile int *>::value_type, volatile int>);

在最新的 GCC 和 clang 上编译,但在 MSVC 2019 上失败,这似乎删除了 volatile 限定符。参见 here on godbolt .

由于 std::iterator_traits 的标准特化,const 被移除对于 const T*T*,但我认为应该保留 volatile

谁是对的?

编辑:我正在使用 C++17 进行编译。

最佳答案

将@康桐薇的链接评论扩展为一个答案:

这是 LWG issue 2952 .在它的决议 value_type 之前是 volatile 限定的,但它的决议改变了它以删除 volatile 限定。

该决议已纳入 C++20 和 MSVC、GCC 和 Clang 似乎都以这种方式实现。 (意思是当编译器设置为 C++20 模式时,问题中的 static_assert 失败。)

关于该决议是否应作为标准先前修订版的缺陷报告应用,您可以在此处阅读一些讨论:https://github.com/microsoft/STL/issues/2612 .

似乎 Microsoft 的标准库实现以及 LLVM 的 libc++ 也将问题解决应用于以前的标准修订模式,而 GCC 的 libstdc++ 则没有。我找不到任何错误报告或类似的讨论后者的选择。

关于c++ - 指向 volatile 的指针的迭代器特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71829984/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com