1// Boost.Range library
2//
3// Copyright Thorsten Ottosen 2003-2004. Use, modification and
4// distribution is subject to the Boost Software License, Version
5// 1.0. (See 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/libs/range/
9//
10
11#include <iostream>
12
13namespace A
14{
15 namespace detail
16 {
17 template< typename T >
18 int f( const T& x )
19 {
20 // Default:
21 std::cout << 1 << std::endl;
22 return 1;
23 }
24
25 template< typename T >
26 int adl_f2( const T& x, int* )
27 {
28 return f( x );
29 }
30
31 template< typename T >
32 int adl_f( const T& x )
33 {
34 return adl_f2( x, 0 );
35 }
36 }
37
38 template< typename T >
39 int f( const T& x )
40 {
41 return detail::adl_f( x );
42 }
43
44 template< typename T >
45 int adl_f2( const T& x, int )
46 {
47 return detail::f( x );
48 }
49
50 //--------------------------------
51
52 class C {};
53/*
54 // Optional:
55 int f( const C& x )
56 {
57 std::cout << 2 << std::endl;
58 }
59*/
60 template< typename T >
61 class D {};
62/*
63 // Optional:
64 template< typename T >
65 int f( const D< T >& x )
66 {
67 std::cout << 3 << std::endl;
68 }
69 */
70}
71
72
73namespace B
74{
75 class C {};
76
77 // Optional:
78/* int f( const C& )
79 {
80 std::cout << 4 << std::endl;
81 }
82*/
83 template< typename T >
84 class D {};
85/*
86 // Optional:
87 template< typename T >
88 int f( const D< T >& x )
89 {
90 std::cout << 5 << std::endl;
91 }
92 */
93}
94
95int main()
96{
97 A::f( x: 42 );
98
99 A::C ac;
100 A::f( x: ac );
101
102 A::D< int > ad;
103 A::f( x: ad );
104
105 B::C bc;
106 A::f( x: bc );
107
108 B::D< int > bd;
109 A::f( x: bd );
110}
111

source code of boost/libs/range/test/adl_conformance_no_using.cpp