[Issue 23400] New: [REG 2.099] Can't format enum value whose base type has non-const opEquals
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sun Oct  9 03:25:09 UTC 2022
    
    
  
https://issues.dlang.org/show_bug.cgi?id=23400
          Issue ID: 23400
           Summary: [REG 2.099] Can't format enum value whose base type
                    has non-const opEquals
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: regression
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: snarwin+bugzilla at gmail.com
As of DMD 2.100.2, the following program fails to compile:
---
struct flagenum {
    auto opEquals(typeof(this) a) {
        return false;
    }
}
enum foo { a = flagenum() }
void main() {
    import std.format: formatValue, singleSpec;
    import std.range: nullSink;
    foo bar;
    auto spec = singleSpec("%s");
    auto sink = nullSink;
    formatValue(sink, bar, spec);
}
---
The error message is:
---
/usr/include/dmd/phobos/std/format/internal/write.d(3024): Error: mutable
method `bug.flagenum.opEquals` is not callable using a `const` object
bug.d(2):        Consider adding `const` or `inout` here
/usr/include/dmd/phobos/std/format/write.d(1239): Error: template instance
`std.format.internal.write.formatValueImpl!(NullSink, foo, char)` error
instantiating
bug.d(16):        instantiated from here: `formatValue!(NullSink, foo, char)`
---
According to run.dlang.io, this is a regression introduced in Phobos 2.099:
2.079.1 to 2.098.1: Success and no output
           2.099.1: Failure with output:
-----
/path/to/dmd.linux/dmd2/linux/bin64/../../src/phobos/std/format/internal/write.d(2899):
Error: mutable method `onlineapp.flagenum.opEquals` is not callable using a
`const` object
onlineapp.d(2):        Consider adding `const` or `inout` here
/path/to/dmd.linux/dmd2/linux/bin64/../../src/phobos/std/format/write.d(1239):
Error: template instance `std.format.internal.write.formatValueImpl!(NullSink,
foo, char)` error instantiating
onlineapp.d(16):        instantiated from here: `formatValue!(NullSink, foo,
char)`
-----
--
    
    
More information about the Digitalmars-d-bugs
mailing list