Variant tries to mimic D's built-in rules for arithmetic conversions but: import std.variant, std.stdio; void main() { auto v1 = Variant(4.5f); auto v2 = Variant(3.5f); writeln((v1+v2).type()); // double (should be float) } The reason is Variant doesn't try to convert to float in opArithmetic. I have submitted a pull request fixing this.
Commit pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/d94803416b683e4aa693c92133c258e8cfc730d6 Merge pull request #805 from callumenator/master Fix for issue 8689, Variant doesn't attempt float conversion in opArithmetic
Seems to be fixed in 2.061