If I have two classes:

```
template <typename T>
struct Node
{
  ...
};

tempalte <typename T_Node, typename T>
struct NodeIterator
{
  T m_value;
};

NodeIterator<Node<int>, int>

```

can I deduce the template argument `T` from `T_Node` without the class `Node` explicitly creating a typedef like this:

```
// To make it clear, yes I know this works, but I had to typedef the type
template <typename T>
struct Node
{
  typedef T node_type;
  ...
};

template <typename T_Node>
struct NoteIterator
{
  typedef typename T_Node::node_type node_type;

  node_type m_value;
};

NodeIterator<Node<int> >

```

If not, is there a reason why I cannot do that (the compiler already knows about `T_Node` and the type `T` it took in) apart from *"the feature is just not there in C++"*? I ask this as usually there is a good reason for something simple (at least on the surface) like this missing from the language.