Imported the original cryp.to site for re-publishing with ikiwiki.
[cryp.to.git] / address-of-riddle.mdwn
1 [[!meta title="C++ address_of() riddle"]]
2 [[!tag cxx-riddle]]
3
4 Can you fill in code for the `address_of()` function so that the program
5 (1) compiles without warning, and (2) prints the addresses of all four
6 objects correctly?
7
8     #include <iostream>
9
10     template <class T>
11     inline T * address_of(T & obj)
12     {
13       // Huh?
14     }
15
16     struct foo
17     {
18       foo()                            { }
19       foo *        operator& ()        { return 0; }
20       foo const *  operator& () const  { return 0; }
21     };
22
23     int main(int, char * [])
24     {
25       double        d1;
26       double const  d2( 0 );
27       std::cout << address_of(d1) << std::endl;
28       std::cout << address_of(d2) << std::endl;
29
30       foo           f1;
31       foo const     f2;
32       std::cout << address_of(f1) << std::endl;
33       std::cout << address_of(f2) << std::endl;
34
35       return 0;
36     }