This constraint suspends until its first two arguments are ground. It then unifies Bool according to the truth value of the corresponding #::/2 constraint.
Note: as opposed to #::/2, the first argument cannot be a list.
?- #::(X, 1 .. 5, B), X = 3.
B = 1
X = 3
Yes (0.00s cpu)
% range violated
?- #::(X, 1 .. 5, B), X = 6.
B = 0
X = 6
Yes (0.00s cpu)
% integrality violated
?- #::(X, 1 .. 5, B), X = 3.0.
B = 0
X = 3.0
Yes (0.00s cpu)