#include <memory>

template <typename Op, typename T>
struct base { };

template <typename Mode, typename T>
struct derived { };

template <typename T>
struct derived<int, T> : public base<int, T> { };

template <typename D, typename T>
void fun(std::unique_ptr<base<D, T>>) { }

int main() {
	auto d = std::make_unique<derived<int, double>>();
	fun(std::move(d));
}