fork download
  1. #include <iostream>
  2.  
  3. namespace meta
  4. {
  5. template<size_t> struct meta_size_t {};
  6. }
  7.  
  8. namespace ns{
  9.  
  10. template <size_t N>
  11. void bar(meta::meta_size_t<N>);
  12.  
  13. // overload??
  14. void bar(meta::meta_size_t<1>)
  15. {
  16. std::cout << __PRETTY_FUNCTION__ << '\n';
  17. }
  18.  
  19. template <size_t N>
  20. void bar(meta::meta_size_t<N>)
  21. {
  22. std::cout << __PRETTY_FUNCTION__ << '\n';
  23. bar(meta::meta_size_t<N-1>());
  24. }
  25.  
  26. template<size_t N>
  27. void foo()
  28. {
  29. bar(meta::meta_size_t<N>());
  30. }
  31. }
  32.  
  33. int main(void)
  34. {
  35. ns::foo<5>();
  36. return 0;
  37. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
void ns::bar(meta::meta_size_t<N>) [with unsigned int N = 5u]
void ns::bar(meta::meta_size_t<N>) [with unsigned int N = 4u]
void ns::bar(meta::meta_size_t<N>) [with unsigned int N = 3u]
void ns::bar(meta::meta_size_t<N>) [with unsigned int N = 2u]
void ns::bar(meta::meta_size_t<1u>)