Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/utility/addressof_test.cpp @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

File size: 1.8 KB
Line 
1// Copyright (C) 2002 Brad King (brad.king@kitware.com)
2//                    Douglas Gregor (gregod@cs.rpi.edu)
3//
4// Distributed under the Boost Software License, Version 1.0. (See
5// accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7
8// For more information, see http://www.boost.org
9
10
11#include <boost/utility/addressof.hpp>
12
13#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
14#pragma warning(push, 3)
15#endif
16
17#include <iostream>
18
19#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
20#pragma warning(pop)
21#endif
22
23#include <boost/detail/lightweight_test.hpp>
24
25template<class T> void scalar_test( T * = 0 )
26{
27    T* px = new T();
28
29    T& x = *px;
30    BOOST_TEST( boost::addressof(x) == px );
31
32    const T& cx = *px;
33    const T* pcx = boost::addressof(cx);
34    BOOST_TEST( pcx == px );
35
36    volatile T& vx = *px;
37    volatile T* pvx = boost::addressof(vx);
38    BOOST_TEST( pvx == px );
39
40    const volatile T& cvx = *px;
41    const volatile T* pcvx = boost::addressof(cvx);
42    BOOST_TEST( pcvx == px );
43
44    delete px;
45}
46
47template<class T> void array_test( T * = 0 )
48{
49    T nrg[3] = {1,2,3};
50    T (*pnrg)[3] = &nrg;
51    BOOST_TEST( boost::addressof(nrg) == pnrg );
52
53    T const cnrg[3] = {1,2,3};
54    T const (*pcnrg)[3] = &cnrg;
55    BOOST_TEST( boost::addressof(cnrg) == pcnrg );
56}
57
58struct addressable
59{
60    addressable( int = 0 )
61    {
62    }
63};
64
65struct useless_type {};
66
67class nonaddressable {
68public:
69
70    nonaddressable( int = 0 )
71    {
72    }
73
74    void dummy(); // Silence GCC warning: all member of class are private
75
76private:
77
78    useless_type operator&() const;
79};
80
81int main()
82{
83    scalar_test<char>();
84    scalar_test<int>();
85    scalar_test<addressable>();
86    scalar_test<nonaddressable>();
87
88    array_test<char>();
89    array_test<int>();
90    array_test<addressable>();
91    array_test<nonaddressable>();
92
93    return boost::report_errors();
94}
Note: See TracBrowser for help on using the repository browser.