adl_conformance_no_using.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 111 行

CPP
111
字号
// 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 );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?