Why are BlueprintPure and const incompatible?

There’s actually a way to get an exec pin on a const function now, just add BlueprintPure=false. Here’s an example:

UFUNCTION(BlueprintCallabe, BlueprintPure=false)
int32 Foo() const;

Notice that you have to mark the function as both BlueprintCallable and BlueprintPure=false to override the default value of BlueprintPure that we assign for const functions.

Not ideal, but this is what we settled on to maintain backward compatibility.