public static function setOn($value, $flag)
    {
        if (!Int::is($value)) {
            throw new \InvalidArgumentException("The \$value parameter must be of type int.");
        }

        if (is_array($flag)) {
            $ret = $value;
            foreach ($flag as $item) {
                $ret = static::setOn($ret, $item);
            }

            return $ret;
        } elseif (!static::is($flag)) {
            throw new \InvalidArgumentException("The \$flag parameter must be of type int and a power of 2.");
        }

        return ($value | $flag);
    }