```D
import std.container.rbtree;
import std.stdio;
const baseTypes = redBlackTree(
"Float", "Float2", "Float3",
"Bool",
"Block",
"Rule", "ComponentNode"
);
void main() {
foreach(string s; baseTypes)
writeln(s);
}
```
Running this code throws:
```
core.exception.AssertError@/dlang/dmd/linux/bin64/../../src/phobos/std/container/rbtree.d(264): parent must not be null
```
Comment #1 by duser — 2022-05-24T06:36:36Z
reduced the example to this:
void main()
{
{
Tree tree = Tree(1);
assert(tree.node is tree.node.self); // ok
}
{
__gshared static Tree tree = Tree(1);
assert(tree.node is tree.node.self); // fail
}
}
struct Tree
{
Node* node;
this(int)
{
node = new Node;
node.set();
assert(node.self is node); // ok
}
}
struct Node
{
Node* self;
void set()
{
self = &this;
}
}
"&this" inside a struct in CTFE seems to have a wrong value when converted to static data (it's correct if you check it with assert in CTFE but not if you check the value at runtime)
Comment #2 by robert.schadek — 2024-12-13T19:22:47Z