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)