This is more of a conceptual question. I'm trying to find the easiest way of converting a two-arg template (the arguments being types) into a one-arg template. I.e., binding one of the types.

This would be the meta-programming equivalent of `bind` in boost/std. My example includes a possible use-case, which is, passing `std::is_same` as template argument to a template that takes a one-arg template template argument (`std::is_same` being a two-arg template), i.e. to `TypeList::FindIf`. The `TypeList` is not fully implemented here, neither is `FindIf`, but you get the idea. It takes a "unary predicate" and returns the type for which that predicate is true, or `void` if not such type.

I have 2 working variants but the first is not a one-liner and the 2nd uses a rather verbose `BindFirst` contraption, that would not work for non-type template arguments. Is there a simple way to write such a one-liner? I believe the procedure I'm looking for is called `currying`.

```
#include <iostream>

template<template<typename, typename> class Function, typename FirstArg>
struct BindFirst
{
    template<typename SecondArg>
    using Result = Function<FirstArg, SecondArg>;
};

//template<typename Type> using IsInt = BindFirst<_EqualTypes, int>::Result<Type>;
template<typename Type> using IsInt = std::is_same<int, Type>;

struct TypeList
{
    template<template<typename> class Predicate>
    struct FindIf
    {
        // this needs to be implemented, return void for now
        typedef void Result;
    };
};

int main()
{

  static_assert(IsInt<int>::value, "");
  static_assert(!IsInt<float>::value, "");

  // variant #1: using the predefined parameterized type alias as predicate
  typedef TypeList::FindIf<IsInt>::Result Result1;

  // variant #2: one-liner, using BindFirst and std::is_same directly
  typedef TypeList::FindIf< BindFirst<std::is_same, int>::Result>::Result Result2;

  // variant #3: one-liner, using currying?
  //typedef TypeList::FindIf<std::is_same<int, _>>::Result Result2;

  return 0;
}

```

Click [here](http://goo.gl/i8UK13) for code in online compiler GodBolt.