According to Why isn't argument deduction allowed in function return type?
When specifying a return type in a template class member function we have to be specific, for example: "the type std::vector
isn't a type, std::vector<int>
is."
So why do both of these examples compile? If I don't include the <T>
in the first example, it shouldn't even be considered a type right?
template<typename T>
Queue<T>::Queue(const Queue& st) {}
template<typename T>
Queue<T>::Queue(const Queue<T>& st) {}
Given this template class
template<typename T>
class Queue {
private:
struct Node {
Node (T value) : value(value), next(nullptr) {}
Node (T value, Node* next) : value(value), next(next) {}
T value;
Node* next;
};
Node* head;
size_t sz;
void cleanList();
public:
Queue();
Queue(const Queue& st);
Queue& operator=(const Queue& st);
~Queue();
size_t size() const noexcept;
bool isEmpty() const noexcept;
T& front();
const Tt& front() const;
void enqueue(const T& elem);
void dequeue();
};