invoke_int_0.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//===----------------------------------------------------------------------===// 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The LLVM Compiler Infrastructure 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// License. See LICENSE.TXT for details. 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)//===----------------------------------------------------------------------===// 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// <functional> 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// template<CopyConstructible Fn, CopyConstructible... Types> 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// unspecified bind(Fn, Types...); 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// template<Returnable R, CopyConstructible Fn, CopyConstructible... Types> 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// unspecified bind(Fn, Types...); 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <functional> 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <cassert> 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template <class R, class F> 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)test(F f, R expected) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assert(f() == expected); 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)template <class R, class F> 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)test_const(const F& f, R expected) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assert(f() == expected); 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int f() {return 1;} 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct A_int_0 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles){ 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int operator()() {return 4;} 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int operator()() const {return 5;} 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int main() 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test(std::bind(f), 1); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test(std::bind(&f), 1); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test(std::bind(A_int_0()), 4); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_const(std::bind(A_int_0()), 5); 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) test(std::bind<int>(f), 1); 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) test(std::bind<int>(&f), 1); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test(std::bind<int>(A_int_0()), 4); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_const(std::bind<int>(A_int_0()), 5); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)