Да, это должно скомпилироваться. std::copy
указано [alg.copy] / 2 , чтобы вести себя , как если бы значение, полученное при разыменовании итератора для каждого элемента в исходном диапазоне, было просто присвоено значению, полученному из разыменование итератора до соответствующего элемента в диапазоне назначения. volatile std::uint32_t
может быть присвоено volatile std::uint32_t
, потому что volatile std::uint32_t
не является const
[basic.lval] / 7 .
Кроме того, обратите внимание, что этот , по-видимому, компилирует в транковой версии GCC (по крайней мере, ту, которая доступна на godbolt). Так что я бы сказал, что это почти наверняка была ошибка, и теперь она, похоже, исправлена & hellip;
Помимо всего этого, вы можете рассмотреть возможность включения <cstdint>
вместо <stdint.h>
, поскольку заголовки стандартной библиотеки C доступны только в C ++ как устаревшая функция совместимости [depr.c.headers] . Когда вы это сделаете, помните о том, что не определено [needs.headers] / 4 , действительно ли сущности, объявленные в этих стандартных заголовках, такие как std::uint32_t
, действительно доступны в глобальном пространстве имен , Таким образом, вы можете рассмотреть возможность использования std::uint32_t
, а не просто uint32_t
и т. Д., Поскольку гарантированно будет присутствовать только первое из них & hellip;