]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/config/test/boost_no_using_breaks_adl.ipp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / config / test / boost_no_using_breaks_adl.ipp
1 // (C) Copyright John Maddock 2001.
2 // Use, modification and distribution are subject to the
3 // Boost Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 // See http://www.boost.org/libs/config for most recent version.
7
8 // MACRO: BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
9 // TITLE: broken ADL
10 // DESCRIPTION: Using declarations break argument dependent lookup
11 // (probably Borland specific), the fix is to use
12 // using namespace whatever; rather than
13 // using whatever::symbol;.
14
15
16 namespace boost_ns
17 {
18 template <class T>
19 T* get_pointer(T* p)
20 { return p; }
21
22 namespace inner2
23 {
24 template <class T>
25 struct X {};
26
27 template <class T>
28 T* get_pointer(X<T>)
29 { return 0; }
30 }
31 }
32
33 namespace user_ns
34 {
35 template <class T>
36 struct Y{};
37
38 template <class T>
39 T* get_pointer(user_ns::Y<T>)
40 { return 0; }
41
42 template <class T>
43 int f(T x)
44 {
45 // use this as a workaround:
46 //using namespace boost;
47 // this statement breaks ADL:
48 using boost_ns::get_pointer; // conforming compilers require
49 // this one to find the auto_ptr
50 // and T* overloads
51 return get_pointer(x) == 0;
52 }
53 }
54
55 namespace boost_function_scope_using_declaration_breaks_adl{
56
57 int test()
58 {
59 int i;
60 typedef void* pv;
61 i = user_ns::f(pv());
62 i = user_ns::f(boost_ns::inner2::X<int>());
63 (void)i;
64 return 0;
65 }
66
67 }
68
69
70
71
72
73