//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <functional>
// reference_wrapper
// template <class... ArgTypes>
// requires Callable<T, ArgTypes&&...>
// Callable<T, ArgTypes&&...>::result_type
// operator()(ArgTypes&&... args) const;
#include<functional>#include<cassert>// member data pointer: cv qualifiers should transfer from argument to return type
structA_int_1{A_int_1():data_(5){}intdata_;};voidtest_int_1(){// member data pointer
{intA_int_1::*fp=&A_int_1::data_;std::reference_wrapper<intA_int_1::*>r1(fp);A_int_1a;assert(r1(a)==5);r1(a)=6;assert(r1(a)==6);constA_int_1*ap=&a;assert(r1(ap)==6);r1(ap)=7;assert(r1(ap)==7);}}intmain(){test_int_1();}