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 // template <class... ArgTypes> 15 // requires Callable<T, ArgTypes&&...> 16 // Callable<T, ArgTypes&&...>::result_type 17 // operator()(ArgTypes&&... args) const; 18 19 #include <functional> 20 #include <cassert> 21 22 // member data pointer: cv qualifiers should transfer from argument to return type 23 24 struct A_int_1 25 { 26 A_int_1() : data_(5) {} 27 28 int data_; 29 }; 30 31 void 32 test_int_1() 33 { 34 // member data pointer 35 { 36 int A_int_1::*fp = &A_int_1::data_; 37 std::reference_wrapper<int A_int_1::*> r1(fp); 38 A_int_1 a; 39 assert(r1(a) == 5); 40 r1(a) = 6; 41 assert(r1(a) == 6); 42 const A_int_1* ap = &a; 43 assert(r1(ap) == 6); 44 r1(ap) = 7; 45 assert(r1(ap) == 7); 46 } 47 } 48 49 int main() 50 { 51 test_int_1(); 52 } 53