\input{header}
\begin{tikzpicture}[scale=0.91, transform shape]

\newnamedcomponent{0}{2.5}{bind1}{bind}
\newnamedcomponent{0}{0}{bind2}{bind}
\umlprovidedinterface[interface=Impl, distance=2, padding=0.9cm]{bind1}
\umlrequiredinterface[interface=Interface, distance=2.2, padding=0.9cm]{bind1}
\umlprovidedinterface[interface={std::function<std::unique\_ptr<Impl(T1,..,Tn)>()>}, distance=5.2, padding=0.9cm]{bind2}
\umlrequiredinterface[interface={std::function<std::unique\_ptr<Interface(T1,..,Tn)>()>}, distance=5.7, padding=0.9cm]{bind2}
\node at (8.8,-0.2) {(for any types T1,...,Tn)};

\end{tikzpicture}
\input{footer}