added nclr::require_type and nclr::optional_type