#include <iostream>
#include <iterator>
constexpr static int const Integer{ 42 };
constexpr static int const& IntegerRef{ Integer };
constexpr static int const IntArray[]{ 42, 43, 44, 45, 46 };
constexpr static int const& IntArray0Ref{ IntArray[0] };
constexpr static int const& IntArray1Ref{ IntArray[1] };
constexpr static int const& IntArray2Ref{ IntArray[2] };
constexpr static int const& IntArray3Ref{ IntArray[3] };
constexpr static int const& IntArray4Ref{ IntArray[4] };
int main(int, char**) noexcept
{
static_assert(&Integer == &IntegerRef, "Mismatched IntegerRef");
static_assert(&IntArray[0] == &IntArray0Ref, "Mismatched IntArray0Ref");
static_assert(&IntArray[1] == &IntArray1Ref, "Mismatched IntArray1Ref");
static_assert(&IntArray[2] == &IntArray2Ref, "Mismatched IntArray2Ref");
static_assert(&IntArray[3] == &IntArray3Ref, "Mismatched IntArray3Ref");
static_assert(&IntArray[4] == &IntArray4Ref, "Mismatched IntArray4Ref");
std::cout
<< "Integer: " << &Integer << "\n"
<< "IntegerRef: " << &IntegerRef << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&Integer), reinterpret_cast<char const*>(&IntegerRef)) << " bytes\n\n"
<< "IntArray[0]: " << &IntArray[0] << "\n"
<< "IntArray0Ref: " << &IntArray0Ref << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&IntArray[0]), reinterpret_cast<char const*>(&IntArray0Ref)) << " bytes\n\n"
<< "IntArray[1]: " << &IntArray[1] << "\n"
<< "IntArray1Ref: " << &IntArray1Ref << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&IntArray[1]), reinterpret_cast<char const*>(&IntArray1Ref)) << " bytes\n\n"
<< "IntArray[2]: " << &IntArray[2] << "\n"
<< "IntArray2Ref: " << &IntArray2Ref << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&IntArray[2]), reinterpret_cast<char const*>(&IntArray2Ref)) << " bytes\n\n"
<< "IntArray[3]: " << &IntArray[3] << "\n"
<< "IntArray3Ref: " << &IntArray3Ref << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&IntArray[3]), reinterpret_cast<char const*>(&IntArray3Ref)) << " bytes\n\n"
<< "IntArray[4]: " << &IntArray[4] << "\n"
<< "IntArray4Ref: " << &IntArray4Ref << "\n"
<< "distance: " << std::distance(reinterpret_cast<char const*>(&IntArray[4]), reinterpret_cast<char const*>(&IntArray4Ref)) << " bytes\n\n";
return 0;
}