I have accidentally found a signature that works perfectly for both C++ and BP:
UFUNCTION(Category="C++", BlueprintPure) FORCEINLINE
bool isAiming(){return ........your stuff....}
The secret is removing “BlueprintCallable”. It seems illogical but FORCEINLINE makes it callable anyway and you must not declare it callable explicitly, otherwise it will behave the opposite way.