Error C4150: deletion of pointer to incomplete type

struct FGAEffectContext;
struct FGAEffect;
class UGAGameEffectSpec;
struct FGAEffectMod;

USTRUCT(BlueprintType)
struct GAMEABILITIES_API FGAEffectHandle
{
	GENERATED_USTRUCT_BODY()
protected:
	//just to be safe we don't run out of numbers..
	UPROPERTY()
		uint32 Handle; //Fname Guid ?

	TSharedPtr<FGAEffect> EffectPtr;

The error is coming from this line:

    struct FGAEffect;

And now the really funny part. If I put it to different header file, with same includes on top it actually compiles (in both headers I do not include declaration of FGAEffect).

Any ideas what is going on ?