You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following minimal test case will result in a binary which hangs up:
import std.range : chain;
import std.internal.cstring : tempCString;
struct Test {
auto filename() const { return chain("a", "b"); }
alias filename this;
}
void main() {
auto name = Test();
auto namez = name.tempCString!char();
// should return fine or crash if doesn't exist, but not hang
}
See https://run.dlang.io/is/8AlJO5
This is a bug because with `name.filename.tempCString!char()` it works fine, so it has an issue with the alias this on that range.
This causes calls to the std.file functions like isFile or getAttributes to hang up if called with a struct like this.
This only happens when it is indirected via an alias this on the argument which is passed.
Another test to test it with public APIs: `std.file.getAttributes(Test())`
The text was updated successfully, but these errors were encountered:
bugzilla (@WalterBright) commented on 2019-12-08T09:50:30Z
Reduced example:
```import std.stdio;import std.range : chain;struct Test { auto filename() const { return chain("a", "b"); } alias filename this;}void main() { auto name = Test(); writeln(name.front); name.popFront(); writeln(name.front);}```
name.front and name.popFront always call filename(), which returns a new range object... This is IMHO not a phobos bug.
you are right, it makes sense that it creates a new object for each instantiation. However this would mean that maybe the isInputRange check or whatever tempCString and others are using, should not allow such a construct which always returns a new instance
d.bugs reported this on 2019-10-21T10:55:33Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=20309
CC List
Description
The following minimal test case will result in a binary which hangs up: import std.range : chain; import std.internal.cstring : tempCString; struct Test { auto filename() const { return chain("a", "b"); } alias filename this; } void main() { auto name = Test(); auto namez = name.tempCString!char(); // should return fine or crash if doesn't exist, but not hang } See https://run.dlang.io/is/8AlJO5 This is a bug because with `name.filename.tempCString!char()` it works fine, so it has an issue with the alias this on that range. This causes calls to the std.file functions like isFile or getAttributes to hang up if called with a struct like this. This only happens when it is indirected via an alias this on the argument which is passed. Another test to test it with public APIs: `std.file.getAttributes(Test())`The text was updated successfully, but these errors were encountered: