member_data.fail.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// 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    f(cap) = 7;
36    }
37}
38
39int main()
40{
41    test(std::mem_fn(&A::data_));
42}
43