invoke_void_0.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
1//===----------------------------------------------------------------------===// 2// 3// ��������������������The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. 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// 0 args, return void 23 24int count = 0; 25 26void f_void_0() 27{ 28 ++count; 29} 30 31struct A_void_0 32{ 33 void operator()() {++count;} 34}; 35 36void 37test_void_0() 38{ 39 int save_count = count; 40 // function 41 { 42 std::reference_wrapper<void ()> r1(f_void_0); 43 r1(); 44 assert(count == save_count+1); 45 save_count = count; 46 } 47 // function pointer 48 { 49 void (*fp)() = f_void_0; 50 std::reference_wrapper<void (*)()> r1(fp); 51 r1(); 52 assert(count == save_count+1); 53 save_count = count; 54 } 55 // functor 56 { 57 A_void_0 a0; 58 std::reference_wrapper<A_void_0> r1(a0); 59 r1(); 60 assert(count == save_count+1); 61 save_count = count; 62 } 63} 64 65int main() 66{ 67 test_void_0(); 68} 69