Skip to content

Commit 29d3fba

Browse files
authored
Update 011_memory_ranges_uninitialized_move_n.cpp
1 parent 463c646 commit 29d3fba

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,36 @@
1-
1
1+
#include <cstdlib>
2+
#include <iomanip>
3+
#include <iostream>
4+
#include <memory>
5+
#include <string>
6+
7+
void print(auto rem, auto first, auto last) {
8+
for (std::cout << rem; first != last; ++first)
9+
std::cout << std::quoted(*first) << ' ';
10+
std::cout << '\n';
11+
}
12+
13+
int main() {
14+
std::string in[] { "No", "Diagnostic", "Required", };
15+
print("initially, in: ", std::begin(in), std::end(in));
16+
17+
if (
18+
constexpr auto sz = std::size(in);
19+
void* out = std::aligned_alloc(alignof(std::string), sizeof(std::string) * sz)
20+
) {
21+
try {
22+
auto first {static_cast<std::string*>(out)};
23+
auto last {first + sz};
24+
std::ranges::uninitialized_move_n(std::begin(in), sz, first, last);
25+
26+
print("after move, in: ", std::begin(in), std::end(in));
27+
print("after move, out: ", first, last);
28+
29+
std::ranges::destroy(first, last);
30+
}
31+
catch (...) {
32+
std::cout << "Exception!\n";
33+
}
34+
std::free(out);
35+
}
36+
}

0 commit comments

Comments
 (0)