C++ Logo

std-proposals

Advanced search

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

From: Hewill Kang <hewillk_at_[hidden]>
Date: Fri, 25 Aug 2023 23:07:50 +0800
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

Received on 2023-08-25 15:08:02