type_ctor.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <functional>
11
12// reference_wrapper
13
14// reference_wrapper(T& t);
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    assert(&r.get() == &t);
30}
31
32void f() {}
33
34int main()
35{
36    void (*fp)() = f;
37    test(fp);
38    test(f);
39    functor1 f1;
40    test(f1);
41    int i = 0;
42    test(i);
43    const int j = 0;
44    test(j);
45}
46