This piece of code (which I reduced with dustmite) gives me the following error when I try to compile it:

$ rdmd -main parser.d parser.d(28): Error: circular initialization of isInputRange parser.d(31): Error: template instance std.meta.staticMap!(handler, ArrayReader*) error instantiating parser.d(36): instantiated from here: unpacker!(RefRange!(immutable(ubyte)[])) parser.d(40): Error: template instance std.range.primitives.isInputRange!(ArrayReader*) error instantiating /usr/include/dmd/phobos/std/meta.d(546): instantiated from here: F!(ArrayReader*) parser.d(43): instantiated from here: staticMap!(toTD, ArrayReader*)
Failed: ["dmd", "-main", "-v", "-o-", "parser.d", "-I."]

I'm not really sure what's causing the error; I'm not declaring `isInputRange` in my code. Commenting out the definition of `TD` (the very last line) removes the error. Am I doing something wrong here, or is this a compiler bug?

Tested with dmd v2.068.1 on Linux x64

Code:
-----
import std.range;
import std.variant;
import std.typetuple;

///
template unpacker(Range)
{
        /// Element data types. See `unpack` for usage.
        alias MsgPackData = Algebraic!(
                ArrayReader*,
        );

        
        /// Reader range for arrays.
        struct ArrayReader {
                MsgPackData _front;
                void update() {
                        _front.drain;
                }
                
                void popFront() {
                        update;
                }
        }
        
        void drain(MsgPackData d) {
                static handler(T)(T t) {
                        static if(isInputRange!T)
                                data;
                }
                d.visit!(staticMap!(handler, MsgPackData.AllowedTypes));
        }
}


alias TestUnpacker = unpacker!(RefRange!(immutable(ubyte)[]));
alias D = TestUnpacker.MsgPackData;

template toTD(T) {
        static if(isInputRange!T)
                alias toTD = This;
}
alias TD = Algebraic!(staticMap!(toTD, D.AllowedTypes)); // test data type

Reply via email to