As part of the contract of a dll-exported C++ interface, classes that are not exported should not be accessible via a public interface of an exported class, and doing so generates warnings on MSVC. These warnings can be safely suprressed as long as all non-exported classes are part of the exported class's private interface, so this change moves all such methods to the private interface, friending where necessary, and finally suppresses the warnings on MSVC.
I ran into a few issues with this change on both gcc and clang.
The first issue is the handling of the friend class namespace. Prepending a :: to the friend declaration for non-namespaced implementation classes took care of one of them.
The bigger issue is that the Swig-generated classes are failing in a number of static methods that need access to the now-private methods. After discussing with Zachary, I'm testing just the CMakeLists.txt portion for now and aborting the other portion until he can work on a swig-enabled build.
Hey Zachary - I'd like to close this one out (or at least get it out of my inbox as a task). Can we break the second part of it into a separate task and call this one done on the first part?
Yes, I had totally forgotten about this one. And now I'm in the weeds on
more pressing issues. So let's call this one done and I'll treat the
remainder as a minor cleanup task, and get back to it when I have some