title: STD error: wrong number of template arguments (1, should be 3)
body: <p>I have three class. One is abstract, second is based on the abstract one and its storing pointers in <code>std::vector</code> to instances of another.  </p>
  
  <p>I want to create <code>std::shared_ptr</code> of <code>ClientRepository</code> to pass it to the Manager class instance in the future. </p>
  
  <p>There is a template class called "Repository". I want to use it to create a few types of <code>Repositories</code>, for example: <code>CarsRepository</code>, <code>ItemsRepository</code>, etc. </p>
  
  <p>Unfortunately I am getting an error while compiling:</p>
  
  <p>main.cpp:84:139: error: template argument 1 is invalid
   std::shared_ptr, std::vector> > p = std::make_shared;
                                                                                                                                         ^</p>
  
  <p>Repository.hpp</p>
  
  <pre><code>#ifndef REPOSITORY_HPP
  #define REPOSITORY_HPP
  
  #include &lt;string&gt;
  
  template&lt;typename typeBOOL, typename typeShared_ptr, typename VectorOfSmarPtrs &gt; class Repository
  {
      protected:
          VectorOfSmarPtrs nameOfVector;
  
      public:
          virtual typeBOOL create(const typeShared_ptr&amp;) = 0;
  };
  
  #endif
  </code></pre>
  
  <p>ClientRepository.hpp</p>
  
  <pre><code>#ifndef CLIENTREPOSITORY_HPP
  #define CLIENTREPOSITORY_HPP
  
  #include &lt;memory&gt;
  #include &lt;string&gt;
  
  #include "Client.hpp"
  #include "Repository.hpp"
  
  class ClientRepository : public Repository&lt;bool, std::shared_ptr&lt;Client&gt;, std::vector&lt;std::shared_ptr&lt;Client&gt; &gt; &gt;{
      public:
          bool create(const std::shared_ptr&lt;Client&gt; &amp; newClient) override;
  };
  
  #endif
  </code></pre>
  
  <p>ClientRepository.cpp</p>
  
  <pre><code>include "ClientRepository.hpp"
  
  bool ClientRepository::create(const std::shared_ptr&lt;Client&gt; &amp; newClient) {
      if(newClient != NULL){
          for(int i = 0; i &lt; this-&gt;nameOfVector.size(); i++) {
              if(this-&gt;nameOfVector.at(i)-&gt;GetPersonalID() == newClient-&gt;GetPersonalID()) {
                  return 0;
              }
          }
          this-&gt;nameOfVector.push_back(newClient);
          return 1;
      }
      else return 0;
  }
  </code></pre>
  
  <p>main.cpp</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;memory&gt;
  
  #include "Client.hpp"
  #include "ClientRepository.hpp"
  #include "Repository.hpp"
  
  int main(){ 
      ClientRepository x;
  
  
      std::shared_ptr&lt;Repository&lt; bool, std::shared_ptr&lt;Client&gt;, std::vector&lt;std::shared_ptr&lt;Client&gt;&gt; &gt; p = std::make_shared&lt;ClientRepository&gt;;
  }
  </code></pre>
  
  <p>What is wrong with this code? What should I change?</p>