I read everywhere that references are not objects, they are just aliases and they have no location on the memory
int x = 256;
int& rx = x;
std::cout << x << " " << &x << std::endl; // Output: 256 0x15FAB0
std::cout << rx << " " << &rx << std::endl; // Output: 256 0x15FAB0
// seems legit ... fair enough ...
Now consider the following
const int& r1 = 8; // lvalue ref to const int
int&& r2 = 32; // rvlaue ref to int
const int&& r3 = 128; // rvalue ref to const int
std::cout << r1 << " " << &r1 << std::endl; // Output: 8 0x15FA8C
std::cout << r2 << " " << &r2 << std::endl; // Output: 32 0x15FA74
std::cout << r3 << " " << &r3 << std::endl; // Output: 128 0x15FA5C
// and ...
std::cout << sizeof(r1) << std::endl; // Ouput: 4
std::cout << sizeof(r2) << std::endl; // Ouput: 4
std::cout << sizeof(r3) << std::endl; // Ouput: 4
So why these references behave like objects, they do have values , memory address and size ... are they exception from the rules of references ? are they located on the stack or somewhere else ?