#include <memory>
#include <iostream>

template <typename T>
void printArr(T const &arr)
{
	std::cout << typeid(T).name() << "\t";
	for (int x = 0; x < 2; ++x)
		for (int y = 0; y < 2; ++y)
			for (int z = 0; z < 2; ++z)
				std::cout << arr[x][y][z] << " ";
	std::cout << std::endl;
}


int main()
{
	int(&arr)[2][2][2] = reinterpret_cast<int(&)[2][2][2]>(*new int[2][2][2]{ { { 1,2 },{ 3,4 } }, { { 5,6 },{ 7,8 } } });
	printArr(arr);
	delete[] &arr;

	int(*arr2)[2][2] = new int[2][2][2]{ { { 1,2 },{ 3,4 } },{ { 5,6 },{ 7,8 } } };
	printArr(arr2);
	delete[] arr2;

	std::unique_ptr<int[][2][2]> arr3(new int[2][2][2]{ { { 1,2 },{ 3,4 } },{ { 5,6 },{ 7,8 } } });
	printArr(arr3);

	std::unique_ptr<int[][2][2]> arr4 = std::make_unique<int[][2][2]>(2);
	printArr(arr4);

	return 0;
}