according to iso cpp ( https://isocpp.org/wiki/faq/private-inheritance#priv-inherit-like-compos
"private inheritance is a syntactic variant of composition (AKA aggregation and/or has-a)"
Meaning only the privately derived class (privateChannel in this case) would be knowing about the relation between the classes, making an attempt to cast ( both implicit cast and static_cast ) privately derived class pointer to base class outside the derived class illegal as it would be similar to casting pointer pointing to 2 different unrelated types. ( you can still perform the cast inside the privately derived class though, see this for example -> https://code.sololearn.com/cevFk481G11S/?ref=app
This also explains why C-Style cast and reinterpret_cast <> still allows it as they allow you to cast to just about anything ( even if the pointer point to totally different types ) assuming that the developer knows what they are doing.