http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46719

Eric Lawless <eplawless+gcc at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |

--- Comment #6 from Eric Lawless <eplawless+gcc at gmail dot com> 2010-11-30 
22:46:46 UTC ---
I think I did a bad job describing the issue, and I think that it's still a
problem. I'd like to clarify it if I can. The following code works:

    template <typename Return, typename... Args> 
    int curry(function<Return(double)> func) // NOTE: double
    { 
        return 0; 
    } 

    int f(double x) 
    { 
        return 0; 
    } 

    int main() 
    { 
        curry<int, double>(f); 
    }

While this does not:

    template <typename Return, typename... Args> 
    int curry(function<Return(Args...)> func) // NOTE: Args...
    { 
        return 0; 
    } 

    int f(double x) 
    { 
        return 0; 
    } 

    int main() 
    { 
        curry<int, double>(f); 
    }

Even though the template parameter pack Args expands to double, GCC is unable
to match f to the type function<int(double)> if I use Args..., where it was
able to with the first example where I used double explicitly.

This is the error I receive:

    error: no matching function for call to ‘curry(int (&)(double))’

Thanks for your time.

Reply via email to