1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <functional> 11 12 // template <class Fn> 13 // class binder2nd 14 // : public unary_function<typename Fn::first_argument_type, typename Fn::result_type> 15 // { 16 // protected: 17 // Fn op; 18 // typename Fn::second_argument_type value; 19 // public: 20 // binder2nd(const Fn& x, const typename Fn::second_argument_type& y); 21 // 22 // typename Fn::result_type operator()(const typename Fn::first_argument_type& x) const; 23 // typename Fn::result_type operator()(typename Fn::first_argument_type& x) const; 24 // }; 25 26 #include <functional> 27 #include <type_traits> 28 #include <cassert> 29 30 #include "../test_func.h" 31 32 class test 33 : public std::binder2nd<test_func> 34 { 35 typedef std::binder2nd<test_func> base; 36 public: test()37 test() : std::binder2nd<test_func>(test_func(3), 4.5) {} 38 do_test()39 void do_test() 40 { 41 static_assert((std::is_base_of< 42 std::unary_function<test_func::first_argument_type, 43 test_func::result_type>, 44 test>::value), ""); 45 assert(op.id() == 3); 46 assert(value == 4.5); 47 48 int i = 5; 49 assert((*this)(i) == 22.5); 50 assert((*this)(5) == 0.5); 51 } 52 }; 53 main()54int main() 55 { 56 test t; 57 t.do_test(); 58 } 59