copy_assign.pass.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <functional>
  10. // reference_wrapper
  11. // reference_wrapper& operator=(const reference_wrapper<T>& x);
  12. #include <functional>
  13. #include <cassert>
  14. class functor1
  15. : public std::unary_function<int, char>
  16. {
  17. };
  18. template <class T>
  19. void
  20. test(T& t)
  21. {
  22. std::reference_wrapper<T> r(t);
  23. T t2 = t;
  24. std::reference_wrapper<T> r2(t2);
  25. r2 = r;
  26. assert(&r2.get() == &t);
  27. }
  28. void f() {}
  29. void g() {}
  30. void
  31. test_function()
  32. {
  33. std::reference_wrapper<void ()> r(f);
  34. std::reference_wrapper<void ()> r2(g);
  35. r2 = r;
  36. assert(&r2.get() == &f);
  37. }
  38. int main()
  39. {
  40. void (*fp)() = f;
  41. test(fp);
  42. test_function();
  43. functor1 f1;
  44. test(f1);
  45. int i = 0;
  46. test(i);
  47. const int j = 0;
  48. test(j);
  49. }