[Issue 8129] Cannot deduce template function when inferring labmda parameters over partially specialized IFTI call.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Jun 2 21:11:55 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8129
Kenji Hara <k.hara.pg at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Summary|Cannot deduce template |Cannot deduce template
|function when using UFCS |function when inferring
|and having a delegate(T) as |labmda parameters over
|first argument and an empty |partially specialized IFTI
|function. |call.
--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> 2012-06-02 21:13:50 PDT ---
This is not UFCS issue. Proper function call shows same errors.
In my opinion, the cause of problem is the inference of lambda parameters over
partially specialized IFTI call.
----
class X {}
class A {}
class B : A {}
void foo(T : A)(X x) {}
void foo(T : A)(X x, void function (T) block) {}
void main()
{
auto x = new X;
//x.foo!B((a){}); // UFCS version shows same errors
foo!B(x, (a){});
// Error: template test.foo does not match any function template
declaration
// Error: template test.foo cannot deduce template function from argument
types !(B)(X,void)
// Error: template instance foo!(B) errors instantiating template
// Call explicitly aliased symbol still not good.
alias foo!B Lol;
Lol(x, (a){});
// Error: template test.foo matches more than one template declaration,
test.d(5):foo(T : A) and test.d(6):foo(T : A)
// Error: function expected before (), not foo!(B) of type void
// But, avoiding lambda parameter inference stops errors.
foo!B(x);
foo!B(x, (B b){});
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list