Your derived class should take a DerivedProperty&
as parameter, similar to how your Base class does it:
class Derived : public Base {
public:
Derived( DerivedProperties& properties ):
Base( properties ) { }
friend std::ostream & operator << ( std::ostream& out, const Derived& derived );
};
Since you're not taking a reference as constructor parameter but an actual object, you're actually storing a reference to a temporary object, that does not exist anymore once the constructor has exited.