Yes it is a regression, please fill a bug report On Wed, Feb 28, 2018 at 2:16 PM, drug via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote:
> https://run.dlang.io/is/HJxtvw > > ``` > import std.stdio, std.typecons, std.math; > void main() > { > auto foo = nullable(2.0); > auto bar = nullable(2.0); > > assert (foo.approxEqual(bar)); > } > ``` > Comiling gives the following: > Up to 2.067.1: Failure with output: > ----- > onlineapp.d(4): Error: undefined identifier nullable, did you mean struct > Nullable(T)? > onlineapp.d(5): Error: undefined identifier nullable, did you mean struct > Nullable(T)? > ----- > > 2.068.2 to 2.072.2: Failure with output: > ----- > onlineapp.d(4): Error: undefined identifier 'nullable', did you mean > struct 'Nullable(T)'? > onlineapp.d(5): Error: undefined identifier 'nullable', did you mean > struct 'Nullable(T)'? > ----- > > 2.073.2 to 2.077.1: Success and no output > Since 2.078.1: Failure with output: > ----- > /path/to/dmd.linux/dmd2/linux/bin64/../../src/phobos/std/math.d(7575): > Error: template std.math.approxEqual cannot deduce function from argument > types !()(Nullable!double, Nullable!double, double, double), candidates are: > /path/to/dmd.linux/dmd2/linux/bin64/../../src/phobos/std/math.d(7499): > std.math.approxEqual(T, U, V)(T lhs, U rhs, V maxRelDiff, V maxAbsDiff = > 1e-05) if ((isNumeric!T || isInputRange!T && isNumeric!(ElementType!T)) && > (isNumeric!U || isInputRange!U && isNumeric!(ElementType!U)) && isNumeric!V) > /path/to/dmd.linux/dmd2/linux/bin64/../../src/phobos/std/math.d(7573): > std.math.approxEqual(T, U)(T lhs, U rhs) > onlineapp.d(7): Error: template instance > std.math.approxEqual!(Nullable!double, > Nullable!double) error instantiating > ----- > tldr - std.math.approxEqual stops deduced its args type when Nullable is > used. >