blob: dff211c60573056da09e16e3a2eecd41edb7652e [file] [log] [blame]
Howard Hinnant94b2dd02010-08-22 00:59:46 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnant412dbeb2010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant94b2dd02010-08-22 00:59:46 +00007//
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));
Peter Collingbournea5adf482014-01-22 22:56:52 +000035 const F& cf = f;
36 assert(cf(ap) == f(ap));
Howard Hinnant94b2dd02010-08-22 00:59:46 +000037 }
38}
39
40int main()
41{
42 test(std::mem_fn(&A::data_));
43}