www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20987] New: incompatible types for... when opBinary "in"


          Issue ID: 20987
           Summary: incompatible types for... when opBinary "in"
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: vital.fadeev gmail.com

Created attachment 1795
  --> https://issues.dlang.org/attachment.cgi?id=1795&action=edit
source code

The Source Code:

    import std.stdio;
    import std.algorithm.searching : find;

    struct Classes
        string[] _classes;
        alias _classes this;

        auto opBinary( string op: "in" )( string rhs )
            return _classes.find( rhs );

    void main()
        Classes cs;

        cs ~= "box";
        writeln( cs._classes );

        auto res = "box" in cs._classes;
        writeln( res );

The Goal:

   - Use overload operator "in"
   - Check string in string[]


   "box" in cs._classes;


   Range r = "box" in cs._classes;
   assert( !r.empty );

   Compile time error:
       Error: incompatible types for ("box") in (cs._classes): string and

Full log:
    C:\src\dtest-op-in>dub run
    Performing "debug" build using C:\D\dmd2\windows\bin\dmd.exe for x86_64.
    dtest-op-in ~master: building configuration "application"...
    source\app.d(25,16): Error: incompatible types for ("box") in
(cs._classes): string and string[]
    C:\D\dmd2\windows\bin\dmd.exe failed with exit code 1.

Jun 28 2020