MSVC doesn't like this use of default arguments. It fails to show the source of the error in user code. Move the checks back into the constructor init list.