#pragma once #include // Class and type declarations template class Array; // Enumerated types must be defined enum Created { CONSTRUCTOR, COPY_CONSTRUCTOR, MOVE_CONSTRUCTOR, ASSIGNMENT_OPERATOR, MOVE_OPERATOR }; // Class and type definitions template class Array { public: Array( std::size_t capacity ); Array( Array const &original ); Array( Array &&original ); ~Array(); Array &operator=( Array const &rhs ); Array &operator=( Array &&rhs ); T const &operator[]( std::size_t const n ) const; T &operator[]( std::size_t const n ); std::size_t capacity() const; Created method() const; private: std::size_t capacity_; T *array_; Created method_; void swap( Array &other ); }; template std::ostream &operator<<( std::ostream &out, Array const &array ); #include "Array.tpp"