Home | History | Annotate | Download | only in depr.lib.binder.2nd
      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:
     37     test() : std::binder2nd<test_func>(test_func(3), 4.5) {}
     38 
     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 
     54 int main()
     55 {
     56     test t;
     57     t.do_test();
     58 }
     59