function MultiSlice() {
	var nargs;
	var proxy;
	var args;
	var v;
	var i;

	nargs = arguments.length;
	if ( !( this instanceof MultiSlice ) ) {
		if ( nargs === 1 ) {
			return new MultiSlice( arguments[ 0 ] );
		}
		if ( nargs === 2 ) {
			return new MultiSlice( arguments[ 0 ], arguments[ 1 ] );
		}
		if ( nargs === 3 ) {
			return new MultiSlice( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ] ); // eslint-disable-line max-len
		}
		if ( nargs === 4 ) {
			return new MultiSlice( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ] ); // eslint-disable-line max-len
		}
		if ( nargs === 5 ) {
			return new MultiSlice( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ], arguments[ 4 ] ); // eslint-disable-line max-len
		}
		args = [];
		for ( i = 0; i < nargs; i++ ) {
			args.push( arguments[ i ] );
		}
		// Use a workaround for being unable to combine `.apply` with the `new` operator:
		proxy = Object.create( MultiSlice.prototype );
		return MultiSlice.apply( proxy, args );
	}
	this._data = [];
	for ( i = 0; i < nargs; i++ ) {
		v = arguments[ i ];
		if ( !isValid( v ) ) {
			throw new TypeError( format( 'invalid argument. Provided arguments must be either a Slice, integer, null, or undefined. Argument: `%d`. Value: `%s`.', i, String( v ) ) );
		}
		this._data.push( ( v === void 0 ) ? null : v );
	}
	return this;
}
Multi-slice constructor.

@constructor
@param {...(Slice|integer|null)} slice - slice
@throws {TypeError} a provided argument must be either a Slice, integer, null, or undefined
@returns {MultiSlice} MultiSlice instance

@example
var Slice = require( '@stdlib/slice/ctor' );

var s1 = new Slice( 0, 10, 1 );
var s2 = new Slice( 2, 12, 2 );

var ms = new MultiSlice( null, s1, s2, 2 );
// returns <MultiSlice>