// 
PACKAGE issue22856

IMPORTPATH
	testdata/issue22856

FILENAMES
	testdata/issue22856.go

FUNCTIONS
	// NewPointerSliceOfSlice is not a factory function because slices ...
	func NewPointerSliceOfSlice() [][]*T

	// NewSlice3 is not a factory function because 3 nested slices of ...
	func NewSlice3() [][][]T

	// NewSliceOfSlice is not a factory function because slices of a ...
	func NewSliceOfSlice() [][]T


TYPES
	// 
	type T struct{}

	// 
	func New() T

	// 
	func NewArray() [1]T

	// 
	func NewPointer() *T

	// 
	func NewPointerArray() [1]*T

	// 
	func NewPointerOfPointer() **T

	// 
	func NewPointerSlice() []*T

	// 
	func NewSlice() []T

