enforce initialization with `new`