- #include <iostream> 
- #include <memory> 
- using namespace std; 
-   
- template <typename T> 
- class Array 
- { 
- public: 
-     explicit Array(size_t size, const T& value = T()): size_(size), memory_(::operator new(size_*sizeof(T)) 
-     { 
-         elements = new (memory_) T[size_]; 
-         std::uninitialized_fill(elements, elements+size_, value); 
-     } 
-     // конструктор класса, который создает Array размера size, заполненный значениями value типа T.  
-     // Если у класса нет конструктора по умолчанию, то второй аргумент этого конструктора обязателен. 
-   
-     Array(): size_(0), elements(new T[0]){} 
-     //   конструктор класса, который можно вызвать без параметров. Должен создавать пустой Array. 
-   
-     Array(const Array& other): size_(other.size_), memory_(::operator new (size_*sizeof(T))) 
-     { 
-         elements = new (memory_) T[size_]; 
-         std::uninitialized_copy(other.elements, other.elements + size_, elements); 
-     } 
-     //   конструктор копирования, который создает копию параметра. Для типа T оператор присваивания не определен. 
-   
-     ~Array() 
-     { 
-         for(size_t i = 0; i!=size_;++i) 
-             elements[i].~T(); 
-         ::operator delete[](elements); 
-     } 
-     //   деструктор, если он вам необходим. 
-   
-     Array& operator=(const Array& other) 
-     { 
-         if(this==&other) return *this; 
-   
-         for(size_t i = 0; i!=size_;++i) 
-             elements[i].~T(); 
-         ::operator delete[](memory_); 
-   
-         memory_ = ::operator new(other.size_); 
-         elements = new (memory_) T[other.size_]; 
-         std::uninitialized_copy(other.elements, other.elements + size_, elements); 
-         size_ = other.size_; 
-         return *this; 
-     } 
-     //   оператор присваивания. 
-   
-     size_t size() const { return size_; } 
-     //   возвращает размер массива (количество элементов). 
-   
-     T& operator[](size_t index) { return elements[index]; } 
-     const T& operator[](size_t index) const { return elements[index]; } 
-     //   две версии оператора доступа по индексу. 
- private: 
-     size_t size_; 
-     char* memory_; 
-     T* elements; 
- }; 
-   
- int main() { 
- 	Array<float> ololo{}; 
- 	Array<float> psh(12, 321.099f); 
- 	std::cout << "psh[10] = " << psh[10] << '\n'; 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIEFycmF5CnsKcHVibGljOgogICAgZXhwbGljaXQgQXJyYXkoc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZhbHVlID0gVCgpKTogc2l6ZV8oc2l6ZSksIG1lbW9yeV8oOjpvcGVyYXRvciBuZXcoc2l6ZV8qc2l6ZW9mKFQpKQogICAgewogICAgICAgIGVsZW1lbnRzID0gbmV3IChtZW1vcnlfKSBUW3NpemVfXTsKICAgICAgICBzdGQ6OnVuaW5pdGlhbGl6ZWRfZmlsbChlbGVtZW50cywgZWxlbWVudHMrc2l6ZV8sIHZhbHVlKTsKICAgIH0KICAgIC8vINC60L7QvdGB0YLRgNGD0LrRgtC+0YAg0LrQu9Cw0YHRgdCwLCDQutC+0YLQvtGA0YvQuSDRgdC+0LfQtNCw0LXRgiBBcnJheSDRgNCw0LfQvNC10YDQsCBzaXplLCDQt9Cw0L/QvtC70L3QtdC90L3Ri9C5INC30L3QsNGH0LXQvdC40Y/QvNC4IHZhbHVlINGC0LjQv9CwIFQuIAogICAgLy8g0JXRgdC70Lgg0YMg0LrQu9Cw0YHRgdCwINC90LXRgiDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINGC0L4g0LLRgtC+0YDQvtC5INCw0YDQs9GD0LzQtdC90YIg0Y3RgtC+0LPQviDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LAg0L7QsdGP0LfQsNGC0LXQu9C10L0uCgogICAgQXJyYXkoKTogc2l6ZV8oMCksIGVsZW1lbnRzKG5ldyBUWzBdKXt9CiAgICAvLyAgINC60L7QvdGB0YLRgNGD0LrRgtC+0YAg0LrQu9Cw0YHRgdCwLCDQutC+0YLQvtGA0YvQuSDQvNC+0LbQvdC+INCy0YvQt9Cy0LDRgtGMINCx0LXQtyDQv9Cw0YDQsNC80LXRgtGA0L7Qsi4g0JTQvtC70LbQtdC9INGB0L7Qt9C00LDQstCw0YLRjCDQv9GD0YHRgtC+0LkgQXJyYXkuCiAgCiAgICBBcnJheShjb25zdCBBcnJheSYgb3RoZXIpOiBzaXplXyhvdGhlci5zaXplXyksIG1lbW9yeV8oOjpvcGVyYXRvciBuZXcgKHNpemVfKnNpemVvZihUKSkpCiAgICB7CiAgICAgICAgZWxlbWVudHMgPSBuZXcgKG1lbW9yeV8pIFRbc2l6ZV9dOwogICAgICAgIHN0ZDo6dW5pbml0aWFsaXplZF9jb3B5KG90aGVyLmVsZW1lbnRzLCBvdGhlci5lbGVtZW50cyArIHNpemVfLCBlbGVtZW50cyk7CiAgICB9CiAgICAvLyAgINC60L7QvdGB0YLRgNGD0LrRgtC+0YAg0LrQvtC/0LjRgNC+0LLQsNC90LjRjywg0LrQvtGC0L7RgNGL0Lkg0YHQvtC30LTQsNC10YIg0LrQvtC/0LjRjiDQv9Cw0YDQsNC80LXRgtGA0LAuINCU0LvRjyDRgtC40L/QsCBUINC+0L/QtdGA0LDRgtC+0YAg0L/RgNC40YHQstCw0LjQstCw0L3QuNGPINC90LUg0L7Qv9GA0LXQtNC10LvQtdC9LgoKICAgIH5BcnJheSgpCiAgICB7CiAgICAgICAgZm9yKHNpemVfdCBpID0gMDsgaSE9c2l6ZV87KytpKQogICAgICAgICAgICBlbGVtZW50c1tpXS5+VCgpOwogICAgICAgIDo6b3BlcmF0b3IgZGVsZXRlW10oZWxlbWVudHMpOwogICAgfQogICAgLy8gICDQtNC10YHRgtGA0YPQutGC0L7RgCwg0LXRgdC70Lgg0L7QvSDQstCw0Lwg0L3QtdC+0LHRhdC+0LTQuNC8LgogICAgCiAgICBBcnJheSYgb3BlcmF0b3I9KGNvbnN0IEFycmF5JiBvdGhlcikKICAgIHsKICAgICAgICBpZih0aGlzPT0mb3RoZXIpIHJldHVybiAqdGhpczsKICAgICAgICAKICAgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIT1zaXplXzsrK2kpCiAgICAgICAgICAgIGVsZW1lbnRzW2ldLn5UKCk7CiAgICAgICAgOjpvcGVyYXRvciBkZWxldGVbXShtZW1vcnlfKTsKCiAgICAgICAgbWVtb3J5XyA9IDo6b3BlcmF0b3IgbmV3KG90aGVyLnNpemVfKTsKICAgICAgICBlbGVtZW50cyA9IG5ldyAobWVtb3J5XykgVFtvdGhlci5zaXplX107CiAgICAgICAgc3RkOjp1bmluaXRpYWxpemVkX2NvcHkob3RoZXIuZWxlbWVudHMsIG90aGVyLmVsZW1lbnRzICsgc2l6ZV8sIGVsZW1lbnRzKTsKICAgICAgICBzaXplXyA9IG90aGVyLnNpemVfOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIC8vICAg0L7Qv9C10YDQsNGC0L7RgCDQv9GA0LjRgdCy0LDQuNCy0LDQvdC40Y8uCiAgICAgICAgCiAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9CiAgICAvLyAgINCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGA0LDQt9C80LXRgCDQvNCw0YHRgdC40LLQsCAo0LrQvtC70LjRh9C10YHRgtCy0L4g0Y3Qu9C10LzQtdC90YLQvtCyKS4KCiAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gZWxlbWVudHNbaW5kZXhdOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gZWxlbWVudHNbaW5kZXhdOyB9CiAgICAvLyAgINC00LLQtSDQstC10YDRgdC40Lgg0L7Qv9C10YDQsNGC0L7RgNCwINC00L7RgdGC0YPQv9CwINC/0L4g0LjQvdC00LXQutGB0YMuCnByaXZhdGU6CiAgICBzaXplX3Qgc2l6ZV87CiAgICBjaGFyKiBtZW1vcnlfOwogICAgVCogZWxlbWVudHM7Cn07CgppbnQgbWFpbigpIHsKCUFycmF5PGZsb2F0PiBvbG9sb3t9OwoJQXJyYXk8ZmxvYXQ+IHBzaCgxMiwgMzIxLjA5OWYpOwoJc3RkOjpjb3V0IDw8ICJwc2hbMTBdID0gIiA8PCBwc2hbMTBdIDw8ICdcbic7CglyZXR1cm4gMDsKfQ==
				
				
				
				
				
			 
			
				
			
			
				
	
		
	
	
	prog.cpp: In constructor ‘Array<T>::Array(size_t, const T&)’:
prog.cpp:9:56: error: class ‘Array<T>’ does not have any field named ‘size_’
     explicit Array(size_t size, const T& value = T()): size_(size), memory_(::operator new(size_*sizeof(T))
                                                        ^~~~~
prog.cpp:9:92: error: ‘size_’ was not declared in this scope
     explicit Array(size_t size, const T& value = T()): size_(size), memory_(::operator new(size_*sizeof(T))
                                                                                            ^~~~~
prog.cpp:17:42: error: expected ‘)’ before ‘{’ token
     Array(): size_(0), elements(new T[0]){}
                                          ^
prog.cpp:21:5: error: expected ‘)’ before ‘{’ token
     {
     ^
prog.cpp:58:12: error: expected ‘{’ at end of input
     size_t size_;
            ^~~~~
prog.cpp: In function ‘int main()’:
prog.cpp:64:21: error: no matching function for call to ‘Array<float>::Array(<brace-enclosed initializer list>)’
  Array<float> ololo{};
                     ^
prog.cpp:9:14: note: candidate: Array<T>::Array(size_t, const T&) [with T = float; size_t = long unsigned int]
     explicit Array(size_t size, const T& value = T()): size_(size), memory_(::operator new(size_*sizeof(T))
              ^~~~~
prog.cpp:9:14: note:   candidate expects 2 arguments, 0 provided
prog.cpp:6:7: note: candidate: constexpr Array<float>::Array(const Array<float>&)
 class Array
       ^~~~~
prog.cpp:6:7: note:   candidate expects 1 argument, 0 provided
prog.cpp:6:7: note: candidate: constexpr Array<float>::Array(Array<float>&&)
prog.cpp:6:7: note:   candidate expects 1 argument, 0 provided
prog.cpp:66:34: error: no match for ‘operator[]’ (operand types are ‘Array<float>’ and ‘int’)
  std::cout << "psh[10] = " << psh[10] << '\n';
                                  ^