AFAIK, boost::compressed_pair được cho là đảm bảo rằng địa chỉ của các ký ức đầu tiên và thứ hai khác nhau trong khi nó thực hiện phép thuật nén cặp. Nó nói như vậy here. Có vẻ như nó không phải là trường hợp và hành vi của nó là khác nhau trên trình biên dịch khác nhau. Tôi đang sử dụng boost v 1.47. Tôi đang thiếu gì?tăng nén_pair và địa chỉ của các đối tượng trống
struct E1 {};
struct E2 {};
boost::compressed_pair<E1, E2> diff_pair;
boost::compressed_pair<E1, E1> same_pair;
// clang++ and g++ 4.7 print the same address but VC2010 prints different addresses.
printf("different pairs = %p, %p\n", &diff_pair.first(), &diff_pair.second());
// clang++ and g++ 4.7 print different addresses but VC2010 prints the same address.
printf("different pairs = %p, %p\n", &same_pair.first(), &same_pair.second());