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

\newnamedcomponent{0}{2.5}{GreeterImpl1}{GreeterImpl}
\newnamedcomponent{0}{0}{GreeterImpl2}{GreeterImpl}
\umlprovidedinterface[interface=GreeterImpl, distance=2.5, padding=0.9cm]{GreeterImpl1}
\umlrequiredinterface[interface=Writer, distance=2.5, padding=0.9cm]{GreeterImpl1}
\umlprovidedinterface[interface=std::function<std::unique\_ptr<GreeterImpl>()>, distance=5.5, padding=0.9cm]{GreeterImpl2}
\umlrequiredinterface[interface=Writer, distance=2.5, padding=0.9cm]{GreeterImpl2}

\end{tikzpicture}
\input{footer}