AFAIK, boost :: compressed_pair должен гарантировать, что адреса первого и второго членов различны, пока он творит свою магию сжатия пары. Так сказано здесь . Похоже, что это не так, и его поведение отличается на разных компиляторах. Пользуюсь boost v 1.47. Что мне не хватает?
struct E1 {};
struct E2 {};
boost::compressed_pair diff_pair;
boost::compressed_pair 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());