`#pragma once` in the cpp files produces a warning with g++. I think this only required in the header files. Anyway great code.