opCast + dtor error

vit vit at vit.vit
Wed Dec 29 08:04:43 UTC 2021


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 :
>
> ```d
> 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.


More information about the Digitalmars-d-learn mailing list