fork download
  1. #include <iostream>
  2.  
  3. struct A
  4. {
  5. template < typename T >
  6. void foo( const T& v )
  7. { std::cout << "A::foo( const T& v ) - v == " << v << '\n' ; }
  8.  
  9. template < typename T, std::size_t N >
  10. void foo( const T(&array)[N] )
  11. {
  12. std::cout << "A::foo( const T(&array)[" << N << "] ): " ;
  13. for( const auto& v : array ) std::cout << v << ' ' ;
  14. std::cout << '\n' ;
  15. }
  16.  
  17. template < typename T >
  18. void foo( const T array[], std::size_t n )
  19. {
  20. std::cout << "A::foo( const T array[], n ) - n == " << n << ": " ;
  21. for( std::size_t i = 0 ; i < n ; ++i ) std::cout << array[i] << ' ' ;
  22. std::cout << '\n' ;
  23. }
  24. };
  25.  
  26. int main()
  27. {
  28. double d[5] = { 1.1, 2.3, 3.3, 4.4, 5.5 } ;
  29. A a ;
  30.  
  31. a.foo( d[3] ) ; // A::foo( const T& v ) - v == 4.4
  32. a.foo(d) ; // A::foo( const T(&array)[5] ): 1.1 2.3 3.3 4.4 5.5
  33. a.foo( d, 5 ) ; // A::foo( const T array[], n ) - n == 5: 1.1 2.3 3.3 4.4 5.5
  34. a.foo( +d ) ; // A::foo( const T& v ) - v == <pointer> (T is pointer to double)
  35. }
  36.  
Success #stdin #stdout 0s 2852KB
stdin
Standard input is empty
stdout
A::foo( const T& v ) - v == 4.4
A::foo( const T(&array)[5] ): 1.1 2.3 3.3 4.4 5.5 
A::foo( const T array[], n ) - n == 5: 1.1 2.3 3.3 4.4 5.5 
A::foo( const T& v ) - v == 0xbfaf3d88