//===----------------------------------------------------------------------===//
//
// 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>// 0 args, return int
intcount=0;intf_int_0(){return3;}structA_int_0{intoperator()(){return4;}};voidtest_int_0(){// function
{std::reference_wrapper<int()>r1(f_int_0);assert(r1()==3);}// function pointer
{int(*fp)()=f_int_0;std::reference_wrapper<int(*)()>r1(fp);assert(r1()==3);}// functor
{A_int_0a0;std::reference_wrapper<A_int_0>r1(a0);assert(r1()==4);}}// 1 arg, return void
voidf_void_1(inti){count+=i;}structA_void_1{voidoperator()(inti){count+=i;}};intmain(){test_int_0();}