I have class Foo
, which has two template parameters, A
and B
:
template<typename A, typename B>
struct Foo {};
Also I have class Base
, which has one template template parameter:
template<template<typename B> typename Foo>
struct Base {};
I want to write class Derived
assuming the following:
Derived
has one template parameter (A
)Derived
extends classBase
Derived
passes as template parameter to classBase
classFoo
, but with one parameter "currying" (A
)
How can I do this?
Here is my (not working) solution:
template<template<typename B> typename Foo>
struct Base {};
template<typename A, typename B>
struct Foo {};
template<template<typename A, typename B> typename Foo, typename A>
struct BindFirst {
template<typename B>
using Result = Foo<A, B>;
};
template<typename A>
struct Derived : Base<
// error is here
typename BindFirst<Foo, A>::Result
> {};
Which gives me error:
template argument for template template parameter must be a class template or type alias template