static inline vector<T> CloneVector(const vector<T>& Vec)
    {
        const u32 NumElems = Vec.size();
        vector<T> Retval(NumElems);

        for(u32 i = 0; i < NumElems; ++i) {
            Retval[i] = static_cast<T>(Vec[i]->Clone());
        }
        return Retval;
    }
string PathFingerprint::ToString(u32 Verbosity) const
{
    string Retval("Pathfingerprint: <");
    bool First = true;
    for (auto const& CommandID : CommandsAlongPathVec) {
        Retval += (First ? "" : " ");
        Retval += to_string(CommandID);
        First = false;
    }
    Retval += ">";
    return Retval;
}
 inline string PrintVisitor::GetIndent()
 {
     string Retval(IndentLevel * 4, ' ');
     return Retval;
 }