Marking blueprint nodes as Protected

I am wondering why the C++ protected keyword does not actually make a function in Blueprint protected, but instead you are required to specify the meta tag BlueprintProtected to ensure the function can only be called internally.

protected: // < this does nothing for BP protection level
	UFUNCTION(BlueprintCallable, meta = (BlueprintProtected), Category = "Character")
	void RespawnCharacter();

This would make working with BP node protection levels a little easier and more consistent with how C++ can access the functions.

hi Tom! i know the question is hugely dated,
but i found this inconsistency still existing in version 4.25.3
have you got an answer about why this must happen and is there any improvement to get rid of this over years?

Thats probably to keep access levels sepretly for C++ and BP, utilizing fact that those C++ access level validity is lost once code is compiled. One thing proofing this is fact that UE4 actor classes have private component variables, yet they need to be accessible by BP to properly work in blueprint editor, kind of losing point access levels on C++ to BP. There might be other Epic and reasons, Epic decided to do this way. There also chance they found parsing C++ access leve; annoying.