title: Should template template parameters be used for a policy with a state?
body: <p>As pointed out by <a href="https://stackoverflow.com/a/214900/2725810">this</a> post, in <a href="https://rads.stackoverflow.com/amzn/click/com/0201704315" rel="nofollow noreferrer" rel="nofollow noreferrer">'Modern C++ Design - Generic Programming and Design Patterns Applied'</a>, Andrei Alexandrescu uses classes with template template parameters to implement the policy pattern:</p>
  
  <pre><code>// Library code
  template &lt;template &lt;class&gt; class CreationPolicy&gt;
  class WidgetManager : public CreationPolicy&lt;Widget&gt;
  {
     ...
  };
  </code></pre>
  
  <p>Now, suppose that the policy class has a state (i.e. it has non-static members) and that the host class stores an object of the policy class:</p>
  
  <pre><code>// Library code
  template &lt;template &lt;class&gt; class Logger&gt;
  struct Algorithm
  {
     Algorithm(Logger&lt;Event&gt; &amp;logger) : logger_(logger) {}
     ...
     private:
         Logger&lt;Event&gt; &amp;logger_; 
  };
  </code></pre>
  
  <p>The user will probably write something like this:</p>
  
  <pre><code>using MyLogger = ConcreteLogger&lt;MyEvent&gt;;
  MyLogger log;
  Algorithm&lt;ConcreteLogger&gt; alg(log);
  </code></pre>
  
  <p>Since the user needs to instantiate <code>ConcreteLogger</code>, is there any remaining advantage in using template template parameter in this case? </p>