| |
| Posted by vit in reply to Tejas | PermalinkReply |
|
vit
| On Wednesday, 29 December 2021 at 01:00:53 UTC, Tejas wrote:
> On Tuesday, 28 December 2021 at 18:27:36 UTC, vit wrote:
> [...]
Since a destructor ignores const , I think adding the ~this to Foo manually is somehow making the compiler have to actually cast away const, which it is doing via cast(Foo) foo , which fails since you've declared your own opCast that only accepts arguments implicitly convertible to bool .
I say this because removing the specialisation in opCast and changing the return type of it to Foo works :
struct Foo{
Foo opCast(T)()const {
assert(0);
return this;
}
~this() {}
}
struct Bar{
const Foo foo;
}
void main(){
//Bar bar = Bar(); //this will trigger the assertion failure
}
Thanks, you are right, generated Bar.~this() try use opCast to cast const away.
Is look like bug in compiler.
I stop using opCast for now.
|