function t.numberConstrainedExclusive(V,q)assert(t.number(V)and t.number(q))local d=t.numberMinExclusive(V)local g=t.numberMaxExclusive(q)return function(V)local q,P=d(V)if not q then return false,P or""end local M,b=g(V)if not M then return false,b or""end return true end end

function t.numberConstrainedExclusive(min, max)
	assert(t.number(min) and t.number(max))
	local minCheck = t.numberMinExclusive(min)
	local maxCheck = t.numberMaxExclusive(max)
	return function(value)
		local minSuccess, minErrMsg = minCheck(value)
		if not minSuccess then
			return false, minErrMsg or ""
		end

		local maxSuccess, maxErrMsg = maxCheck(value)
		if not maxSuccess then
			return false, maxErrMsg or ""
		end

		return true
	end
end
