C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Add [[no_unique_address]] attribute to std::pair

From: Barry Revzin <barry.revzin_at_[hidden]>
Date: Fri, 25 Aug 2023 11:30:34 -0500
On Fri, Aug 25, 2023, 10:08 AM Hewill Kang via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> Hi all experts,
>
> boost::compressed_pair is widely used as a replacement for std::pair in
> order to save storage when one of the data members is an empty class.
>
> The __compressed_pair helper class, which is similar to
> boost::compressed_pair, is also widely used in libc++.
>
> I wonder if we could get this compression optimization at almost no cost
> if add the C++ [[no_unique_address]] attribute to the members of std::pair
> :
>
> namespace std {
> template<class T1, class T2>
> struct pair {
> using first_type = T1;
> using second_type = T2;
>
> [[no_unique_address]] T1 first; // <- here
> [[no_unique_address]] T2 second; // <- here
> };
> }
>
> This looks reasonable to me, and almost achieves the equivalent of
> boost::compressed_pair.
>
> What do you guys think about this? This seems like a great enhancement to
> me. Or does this kind of practice bring certain issues?
>
> Comments are very welcome.
>
> Hewill
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals


std::pair and std: tuple aren't even trivially copyable when they could be
due to ABI. This would be even worse.

Sorry,

Barry

Received on 2023-08-25 16:30:48