1#include <memory>
2#include <string>
3
4struct User {
5 int id = 30;
6 std::string name = "steph";
7};
8
9// libc++ stores unique_ptr data in a compressed pair, which has a specialized
10// representation when the type of the second element is an empty class. So
11// we need a deleter class with a dummy data member to trigger the other path.
12struct NonEmptyIntDeleter {
13 void operator()(int* ptr) { delete ptr; }
14
15 int dummy_ = 9999;
16};
17
18int main() {
19 std::unique_ptr<int> up_empty;
20 std::unique_ptr<int> up_int = std::make_unique<int>(args: 10);
21 std::unique_ptr<std::string> up_str = std::make_unique<std::string>(args: "hello");
22 std::unique_ptr<int> &up_int_ref = up_int;
23 std::unique_ptr<int> &&up_int_ref_ref = std::make_unique<int>(args: 10);
24 std::unique_ptr<User> up_user = std::make_unique<User>();
25 auto up_non_empty_deleter =
26 std::unique_ptr<int, NonEmptyIntDeleter>(new int(1234));
27
28 return 0; // break here
29}
30

source code of lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/unique_ptr/main.cpp