Boost.CompressedPair provides boost::compressed_pair, a class that behaves like std::pair. However, if one or both template parameters are empty classes, boost::compressed_pair consumes less memory. boost::compressed_pair uses a technique known as empty base class optimization.
To use boost::compressed_pair, include the header file boost/compressed_pair.hpp.
boost::compressed_pair#include <boost/compressed_pair.hpp>
#include <utility>
#include <iostream>
struct empty {};
int main()
{
std::pair<int, empty> p;
std::cout << sizeof(p) << '\n';
boost::compressed_pair<int, empty> cp;
std::cout << sizeof(cp) << '\n';
}Example 28.1 illustrates this by using boost::compressed_pair for cp and std::pair for p. When compiled using Visual C++ 2013 and run on a 64-bit Windows 7 system, the example returns 4 for sizeof(cp) and 8 for sizeof(p).
Please note that there is another difference between boost::compressed_pair and std::pair: the values stored in boost::compressed_pair are accessed through the member functions first() and second(). std::pair uses two identically named member variables instead.