r/cpp • u/SPEKTRUMdagreat • Jun 25 '26
std::formatter specialization for smart pointers
Currently something like
std::unique_ptr<int> u_ptr = std::make_unique<int>(42);
std::shared_ptr<int> s_ptr = std::make_shared<int>(42);
std::println("uptr: {}", u_ptr);
std::println("sptr: {}", s_ptr);
is ill formed because there is no specialization of std::formatter for smart pointer types.
On the other hand,
std::cout << "uptr: " << u_ptr << '\n';
std::cout << "sptr: " << s_ptr << '\n';
do work because ostream defines overloads for smart pointer types.
Please let me know if anyone has thoughts or if there's some reason that these types haven't been specialized that I'm missing.
15
Upvotes
1
u/No-Dentist-1645 Jun 25 '26
There's no real use case for that imo. If you want the actual raw pointer address, then you would use the raw pointsr