#include <array>
#include <cstdint>
#include <cstring>
#include <iterator>
#include <string_view>
int UnsafeIndex();
void fct() {
auto buf = std::to_array<int>({1, 2, 3, 4});
buf[UnsafeIndex()] = 1;
auto buf2 = std::to_array<char>({'x', 'y', 'z'});
buf2[UnsafeIndex()] = 'a';
memcpy(buf2.data(), buf.data(), 1);
}
#define UNSAFE_BUFFER_USAGE [[clang::unsafe_buffer_usage]]
class File {
public:
File() = default;
UNSAFE_BUFFER_USAGE int ReadAtCurrentPos(char* data, int size);
};
void fct2() {
std::array<char, 10> data;
data[UnsafeIndex()] = 'a';
File f;
f.ReadAtCurrentPos(data.data(), 10);
}
void fct3() {
std::array<char, 10> data;
data[UnsafeIndex()] = 'a';
std::ignore = std::size(data);
std::ignore = std::begin(data);
std::ignore = std::end(data);
std::ignore = std::cbegin(data);
std::ignore = std::cend(data);
std::ignore = std::rbegin(data);
std::ignore = std::rend(data);
std::ignore = std::crbegin(data);
std::ignore = std::crend(data);
std::ignore = std::empty(data);
std::swap(data, data);
std::ranges::find(data, 'a');
std::ignore = std::ranges::min(data);
}
void fct4() {
const std::string_view buf = "123456789";
std::ignore = buf[UnsafeIndex()];
std::ignore = memcmp(buf.data(), "xxx456789", 3);
}
void fct5() {
auto buf = std::to_array<char>({"hello, world"});
std::ignore = buf[UnsafeIndex()];
std::string s(buf.data());
}