On Wednesday, 28 June 2017 at 11:49:57 UTC, Balagopal Komarath wrote:
Shouldn't the compiler be able to resolve foo!g(3) to the first template foo?

import std.stdio;
import std.algorithm;
import std.range;

auto foo(F, T)(T x)
{
    return x.foo(F);
}

auto foo(F, T)(T x, F f)
{
    return f(x);
}

int g(int x) { return x; }

void main()
{
    foo(3, &g); // 2nd foo
    foo!g(3);   // error
}

I get the error message.

onlineapp.d(20): Error: template onlineapp.foo cannot deduce function from argument types !(g)(int), candidates are:
onlineapp.d(5):         onlineapp.foo(F, T)(T x)
onlineapp.d(10):        onlineapp.foo(F, T)(T x, F f)

symbol 'g' isn't type.

auto foo(alias F, T)(T x)
{
    return x.foo(&F);
}

Reply via email to