#include <iostream>
//forward declaration so that B can be used in declaration B createB();
class B;
class A {
public:
A() { std::cout << "A"; }
//this is declaration
B createB();
};
class B {
public:
B() { std::cout << "B"; }
friend B A::createB();
};
//this is definition
B A::createB() { return B(); }
int main() {
A a;
B b = a.createB();
}