copy_assign.pass.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
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
10// <functional>
11
12// reference_wrapper
13
14// reference_wrapper& operator=(const reference_wrapper<T>& x);
15
16#include <functional>
17#include <cassert>
18
19class functor1
20    : public std::unary_function<int, char>
21{
22};
23
24template <class T>
25void
26test(T& t)
27{
28    std::reference_wrapper<T> r(t);
29    T t2 = t;
30    std::reference_wrapper<T> r2(t2);
31    r2 = r;
32    assert(&r2.get() == &t);
33}
34
35void f() {}
36void g() {}
37
38void
39test_function()
40{
41    std::reference_wrapper<void ()> r(f);
42    std::reference_wrapper<void ()> r2(g);
43    r2 = r;
44    assert(&r2.get() == &f);
45}
46
47int main()
48{
49    void (*fp)() = f;
50    test(fp);
51    test_function();
52    functor1 f1;
53    test(f1);
54    int i = 0;
55    test(i);
56    const int j = 0;
57    test(j);
58}
59