Why use keyword "class" in TSubobjectPtr, TSubclassOf and in function parameters?

TSharedPtr/TWeakPtr do not work with UObjects.
If you want to use smart pointer with UObject you need to use TWeakObjectPtr<>