member_data.pass.cpp revision a4c0d87a84b5d324726b334d10fe2f8c24215fad
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// template<Returnable R, class T> unspecified mem_fn(R T::* pm);
13
14#include <functional>
15#include <cassert>
16
17struct A
18{
19    double data_;
20};
21
22template <class F>
23void
24test(F f)
25{
26    {
27    A a;
28    f(a) = 5;
29    assert(a.data_ == 5);
30    A* ap = &a;
31    f(ap) = 6;
32    assert(a.data_ == 6);
33    const A* cap = ap;
34    assert(f(cap) == f(ap));
35    const F& cf = f;
36    assert(cf(ap) == f(ap));
37    }
38}
39
40int main()
41{
42    test(std::mem_fn(&A::data_));
43}
44