This post argues the C++ rule: One should never forward declare a name from a 3rd party library This rule is a generalisation of the same rule for the standard library. The standard says [namespace.std]: The behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a namespace within . . .