Это поведение undefined в С++ для доступа к элементам в смежных массивах, как в следующем коде?
#include <type_traits>
#include <algorithm>
#include <iterator>
int main()
{
int a[10][10];
static_assert(std::is_standard_layout< decltype(a) >::value, "!");
std::fill(std::begin(*std::begin(a)), std::end(*std::prev(std::end(a))), 0);
struct B { int b[10]; };
B b[10];
static_assert(std::is_standard_layout< decltype(b) >::value, "!");
std::fill(std::begin(std::begin(b)->b), std::end(std::prev(std::end(b))->b), 0);
}
Технически я думаю, что для POD-типов законным является доступ к основной памяти любым способом, но как насчет std::*
материала?
Что делать, если я изменяю все begin/end
на rbegin/rend
?