Consider the following code:
#include
template
struct outer {
struct inner {};
};
template
std::ostream&
You can move the operator into the inner class body and put friend
before it. Then replace the parameter type by just inner
.
Another technique is to derive inner from a CRTP base parameterized by inner. Then make the parameter type the CRTP class and cast the parameter reference to the derived inner
class, the type of which is given by the template argument you deduce.