title: C++ double pointer not known conversion
body: <p>I am literally freaking out on the following :</p>
  
  <pre><code>template &lt;class T&gt; // int, float, double etc..
  class Graph {
  public:
  
    // Documentation, it has to be between [0..100]
    Graph(int size = 10, int density = 10, T range = 0):
      m_size(size),
      m_density(density),
      m_range(range) {
      generate();
    }
  
    ~Graph() {
       for (int i = 0; i &lt; m_size; i++)
      delete[] m_graph[i];
        delete[] m_graph;
    }
  
    [..]
  
    static Graph&lt;T&gt;* custom(T** cgraph, int size, T range) {
      Graph&lt;T&gt; *graph = new Graph&lt;T&gt;(size, 10, range);
      for (int i = 0; i &lt; size; i++)
        delete[] graph-&gt;m_graph[i];
      delete[] graph-&gt;m_graph;
      graph-&gt;m_graph = cgraph;
    }
  
  
  private:
    T** m_graph;
    [ .. ]
  };
  
  int nodes[4][4] = {
    { 6, 5, 2, 5 },
    { 5, 6, 3, 3 },
    { 1, 3, 6, 1 },
    { 5, 3, 1, 6 }
  };
  
  int main() {
      Graph&lt;int&gt; *graph = Graph&lt;int&gt;::custom(nodes, 4, 5);
  }
  </code></pre>
  
  <p>What is it poorly failing to compile reporting the following errors ?</p>
  
  <pre><code>   g++ graph.cpp -o test_graph 
  graph.cpp: In function ‘int main()’:
  graph.cpp:191:55: error: no matching function for call to ‘Graph&lt;int&gt;::custom(int [4][4], int, int)’
       Graph&lt;int&gt; *graph = Graph&lt;int&gt;::custom(nodes, 4, 5);
                                                         ^
  graph.cpp:60:20: note: candidate: static Graph&lt;T&gt;* Graph&lt;T&gt;::custom(T**, int, T) [with T = int]
     static Graph&lt;T&gt;* custom(T** cgraph, int size, T range) {
                      ^
  graph.cpp:60:20: note:   no known conversion for argument 1 from ‘int [4][4]’ to ‘int**’
  </code></pre>
  
  <p>It looks so right to me, what's wrong ?</p>