The reason you see this behavior is because F # does not define (~%)with static constraints, like most top-level operators. It is defined as a function Quotations.Expr<'a> -> 'a. Consequently, the function (~%)(which is an alias for op_Splice) that you have identified by type Tis not allowed using the top-level operator (~%).
FSI:
> <@ (~%) @>;;
<@ (~%) @>;;
^^^^^^^^^^
C:\Users\Stephen\AppData\Local\Temp\stdin(5,1): error FS0030: Value restriction. The value 'it' has been inferred to have generic type
val it : Expr<(Expr<'_a> -> '_a)>
Either define 'it' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
, (~%) , :
let inline (~%) (x : ^a) = (^a : (static member op_Splice : ^a -> 'b) (x))
, :
let x = <@ 3 @>
<@ %x @>
----^
error FS0001: The type 'Expr<int>' does not support the operator '~%'
(~%) . , Expr Expr<'T>, - , op_Splice.
&& ||. ( op_BooleanAnd op_BooleanOr), , .