I don't know what the odds are that anyone actually having this problem will run across this on google. But maybe someone will read it and remember before-hand.
I have an inheritance hierarchy something like
Interface -> ABC -> C -> D.
Each constructor explicitly calls its parent class' constructor, with the appropriate parameter.
ABC had a default parameter to its constructor. Things just weren't working right, and I noticed that the constructors were getting called out of order.
ABC was getting called first, with the default parameter, then
D. When I got rid of the default parameter,
D (and all its siblings) quit compiling because
ABC didn't have a default constructor.
After a great deal of frustration and trying to isolate the problem, I realized that
C was inheriting virtually from
ABC. I think I was planning on it being a mixin with other classes that also inherit from
ABC. (This project has no architecture or up-front planning. It's cowboy-coding at its finest. And C++ is the wrong language for that).
I don't know whether this is a C++ bug or just part of the standard that I missed, and I've already wasted *way* too much time on it. Hopefully this will help someone else avoid making the same mistake.