www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21468] New: Inscrutable template error when

https://issues.dlang.org/show_bug.cgi?id=21468

          Issue ID: 21468
           Summary: Inscrutable template error when core.stdcpp.vector of
                    a struct with a core.stdcpp.vector field is referenced
                    before the struct's definition
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: n8sh.secondary hotmail.com

Related discussion at
https://forum.dlang.org/thread/efjydhujahujqjrvmnsk forum.dlang.org

Fails with "dmd -m64" on Microsoft Windows:
---
import core.stdcpp.vector: stdcpp_vector = vector;

void foo(stdcpp_vector!(S)* s) {}

struct S
{
    stdcpp_vector!int a;
}

void main(){}
---
main.d(7): Error: struct core.stdcpp.vector.vector(T, Alloc = allocator!T)
recursive template expansion
main.d(7):        while looking for match for stdcpp_vector!(int,
allocator!int)
......\src\druntime\import\core\stdcpp\vector.d(33): Error: template instance
core.stdcpp.allocator.allocator!(S) error instantiating
main.d(3):        instantiated from here: stdcpp_vector!(S)

Succeeds with "dmd -m64" on Microsoft Windows:
---
import core.stdcpp.allocator: allocator;
import core.stdcpp.vector: stdcpp_vector = vector;

void foo(stdcpp_vector!(S, allocator!S)* s) {}

struct S
{
    stdcpp_vector!int a;
}

void main(){}
---

--
Dec 10 2020