While Priv_t
is a private declaration, you should move
friend std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj);
into the Base_t
:
class Base_t
{
private:
struct Priv_t
{
} p;
friend std::ostream & operator<<(std::ostream &os, const Base_t& obj);
friend std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj);
};