Extremely simple stack implementation using a vector
Remove int n;from member variable.
Underlying container std::vector holds the size information of the stack class. It increases the size of stack class object by sizeof(int). 

Remove various default definition methods from your class. Compiler would generate it for such classes. Due to these definition your class looks more verbose.

Implement all your member functions using the underlying container classes.

Prefer the standard name of your method instead of other. This way any program would easily use your custom class instead of std::stack. Change the isEmpty() to empty()

Your implementation can be simplified as below. 

template&lt;class T&gt;
class Stack {
public:
    Stack(const std::initializer_list&lt;T&gt;&amp; i):elem(i) {}
    int size() const { return elem.size(); }
    bool empty() const { return elem.empty();}
    void push(const T&amp;);
    T pop();
    T peek();
private:
    std::vector&lt;T&gt; elem;
};


template&lt;class T&gt;
void Stack&lt;T&gt;::push(const T&amp; t) {
    elem.push_back(t);
}

template&lt;class T&gt;
T Stack&lt;T&gt;::pop() {
    if (empty()) {
        throw std::out_of_range("underflow");
    }
    auto x = elem.back();  
    elem.pop_back();
    return x;
}

template&lt;class T&gt;
T Stack&lt;T&gt;::peek() {
    if (empty()) {
        throw std::out_of_range("underflow");
    }
    return elem.back();
}