title: how to tell compiler that a name is a template type name?
body: <p>For example I got code like this:</p>
  
  <pre><code>#include &lt;iostream&gt;
  class Bar {
   public:
    class Foo {
     public:
      static void print() {
        std::cout &lt;&lt; "hello" &lt;&lt; std::endl;
      }
    };
  };
  
  template&lt;typename Type, typename MemberType&gt;
  class Test {
   public:
    Test() {
      Type::MemberType::print();
    }
  };
  
  int main() {
    Bar::Foo::print();
    Test&lt;Bar, Bar::Foo&gt; test;
  }
  </code></pre>
  
  <p>when compiling, the compiler told me that <code>no member named 'MemberType' in 'Bar'</code>, it trying to find the literal name "MemberType" other than what is actual is.</p>
  
  <p>How can fix this problem? </p>