#include <iostream> class Outer { public: class Inner { friend class Outer; Inner(int d); public: int m_d; }; Inner makeInner(); }; Outer::Inner Outer::makeInner() { return Inner(42); } Outer::Inner::Inner(int d) : m_d(d) {} int main() { Outer outer; Outer::Inner inner = outer.makeInner(); std::cout << inner.m_d << std::endl; }