Imperfect C++ door Matthew Wilson