mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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 );
 | 
						|
}
 |