fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. #include <utility>
  4.  
  5. template<typename Ty, std::size_t N>
  6. void foo(Ty (&&)[N])
  7. {
  8. std::cout << "Ty (&&)[" << N << "]\t" << std::is_const<Ty>::value << '\n';
  9. }
  10.  
  11. template<typename Ty, std::size_t N>
  12. void foo(Ty (&)[N])
  13. {
  14. std::cout << "Ty (&)[" << N << "]\t" << std::is_const<Ty>::value << '\n';
  15. }
  16.  
  17. template<typename Ty>
  18. using id = Ty;
  19.  
  20. int main()
  21. {
  22. std::cout.setf(std::cout.boolalpha);
  23.  
  24. foo(id<int[]>{1, 2, 3, 4, 5});
  25. foo(id<int const[]>{1, 2, 3, 4, 5}); // <-- HERE.
  26. int xs[]{1, 2, 3, 4, 5};
  27. foo(xs);
  28. int const ys[]{1, 2, 3, 4, 5};
  29. foo(ys);
  30. foo(std::move(xs));
  31. foo(std::move(ys));
  32. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
Ty (&&)[5]	false
Ty (&)[5]	true
Ty (&)[5]	false
Ty (&)[5]	true
Ty (&&)[5]	false
Ty (&&)[5]	true