mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Boost.Range library
 | |
| //
 | |
| //  Copyright Thorsten Ottosen 2003-2004. Use, modification and
 | |
| //  distribution is subject to the Boost Software License, Version
 | |
| //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
 | |
| //  http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| // For more information, see http://www.boost.org/libs/range/
 | |
| //
 | |
| 
 | |
| #include <iostream>
 | |
| 
 | |
| namespace A
 | |
| {
 | |
|    namespace detail
 | |
|    {
 | |
|       template< typename T >
 | |
|       int f( const T& x )
 | |
|       {
 | |
|          // Default:
 | |
|          std::cout << 1 << std::endl;
 | |
|          return 1;
 | |
|       }
 | |
|    
 | |
|       template< typename T >
 | |
|       int adl_f2( const T& x, int* )
 | |
|       {
 | |
|          return f( x );
 | |
|       }
 | |
|    
 | |
|       template< typename T >
 | |
|       int adl_f( const T& x )
 | |
|       {
 | |
|          return adl_f2( x, 0 );
 | |
|       }
 | |
|    }
 | |
| 
 | |
|    template< typename T >
 | |
|    int f( const T& x )
 | |
|    {
 | |
|       return detail::adl_f( x );
 | |
|    }
 | |
| 
 | |
|    template< typename T >
 | |
|    int adl_f2( const T& x, int )
 | |
|    {
 | |
|       return detail::f( x );
 | |
|    }
 | |
|    
 | |
|    //--------------------------------
 | |
|    
 | |
|    class C {};
 | |
| /*
 | |
|    // Optional:
 | |
|    int f( const C& x )
 | |
|    {
 | |
|       std::cout << 2 << std::endl;
 | |
|    }
 | |
| */
 | |
|    template< typename T >
 | |
|    class D {};
 | |
| /*
 | |
|    // Optional:
 | |
|    template< typename T >
 | |
|    int f( const D< T >& x )
 | |
|    {
 | |
|       std::cout << 3 << std::endl;
 | |
|    }
 | |
|    */
 | |
| }
 | |
| 
 | |
|    
 | |
| namespace B
 | |
| {
 | |
|    class C {};
 | |
| 
 | |
|    // Optional:
 | |
| /*   int f( const C& )
 | |
|    {
 | |
|       std::cout << 4 << std::endl;
 | |
|    }
 | |
| */
 | |
|    template< typename T >
 | |
|    class D {};
 | |
| /*
 | |
|    // Optional:
 | |
|    template< typename T >
 | |
|    int f( const D< T >& x )
 | |
|    {
 | |
|       std::cout << 5 << std::endl;
 | |
|    }
 | |
|    */
 | |
| }
 | |
| 
 | |
| int main()
 | |
| {
 | |
|    A::f( 42 );
 | |
| 
 | |
|    A::C ac;
 | |
|    A::f( ac );
 | |
| 
 | |
|    A::D< int > ad;
 | |
|    A::f( ad );
 | |
| 
 | |
|    B::C bc;
 | |
|    A::f( bc );
 | |
| 
 | |
|    B::D< int > bd;
 | |
|    A::f( bd );
 | |
| }
 |