language: C++ 4.7.2 (gcc-4.7.2)
date: 694 days 9 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using namespace std;
 
struct ghost
{
  ghost* operator&() const volatile { return 0; }
  ghost* pointer () { return this; }
};
 
template<typename T>
T* address_of (T &obj)
{
  char *p = &(reinterpret_cast<char&>(const_cast<T&>(obj)));
  return reinterpret_cast<T*>(p);
}
 
int main()
{
  ghost clyde;
  ghost* clydes_address = address_of(clyde);
  cout<<"clydes_address = "<<clydes_address<<" clyde.pointer() = "<<clyde.pointer()<<endl;
}