title: C++: candidate template ignored: invalid explicitly-specified argument for template parameter
body: <p>I have this function header:</p>
  
  <pre><code>template &lt;
      bool src_alpha,
      int sbpp, int dbpp,
      typename T1, typename T2,
      Color (*getFunc)(T1 data, Uint8* addr),
      void (*putFunc)(T2 data, Uint8* addr, Color c)
  &gt;
  static void OperateOnSurfaces(T1 data1, T2 data2, SDL_Surface * bmpDest, SDL_Surface * bmpSrc, SDL_Rect&amp; rDest, SDL_Rect&amp; rSrc)
  </code></pre>
  
  <p>This is how I use it:</p>
  
  <pre><code>OperateOnSurfaces&lt;
      true,
      32, 32,
      SDL_PixelFormat*, SDL_PixelFormat*,
      GetPixel&lt;true,32&gt;, PutPixel&lt;true,true,32&gt; &gt;(
      bmpSrc-&gt;format, bmpDest-&gt;format,
      bmpDest, bmpSrc, rDest, rSrc);
  </code></pre>
  
  <p>This is <code>GetPixel</code> and <code>PutPixel</code>:</p>
  
  <pre><code>template&lt;bool alpha, int bpp&gt;
  static Color GetPixel(SDL_PixelFormat* format, Uint8* addr) { /* .. */ }
  
  template&lt;bool alpha, bool alphablend, int bpp&gt;
  static void PutPixel(SDL_PixelFormat* format, Uint8* addr, Color col) { /* .. */ }
  </code></pre>
  
  <p>And I get this error:</p>
  
  <p><code>note: candidate template ignored: invalid explicitly-specified argument for template parameter 'getFunc' [3]</code></p>
  
  <p>Why?</p>