• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[#currying]
2[section Currying]
3
4A [link metafunction template metafunction] supports ['currying] when it accepts
5less arguments than it normally expects. When less arguments are provided, then
6it returns a [link metafunction_class template metafunction class] expecting
7the remaining arguments. That template metafunction class is also expected to
8support currying.
9
10For example assuming the following metafunction is given:
11
12  template <class A, class B>
13  struct plus;
14
15It takes two values, adds them and returns their result. For example:
16
17  static_assert(
18    plus<
19      std::integral_constant<int, 11>,
20      std::integral_constant<int, 2>
21    >::type::value == 13,
22    "This should work"
23  );
24
25If it supports currying, then the following should also work:
26
27  using inc = plus<std::integral_constant<int, 1>>;
28
29  static_assert(
30    inc::apply<std::integral_constant<int, 12>>::type::value == 13,
31    "This should work"
32  );
33
34The above example defines the `inc` template metafunction class by calling
35`plus` with just one argument: the [link boxed_value boxed] `1` value.
36
37[endsect]
38
39