Bug 20666 – Variant assignment from const of large type with indirections

Status
NEW
Severity
normal
Priority
P3
Component
phobos
Product
D
Version
D2
Platform
All
OS
Windows
Creation time
2020-03-11T12:04:20Z
Last change time
2024-12-01T16:36:31Z
Assigned to
No Owner
Creator
Simen Kjaeraas
Moved to GitHub: phobos#10411 →

Comments

Comment #0 by simen.kjaras — 2020-03-11T12:04:20Z
When a type T is small enough, Variant allows assignment from it even if it is not implicitly convertible to Unqual!T. However, when the size of the type is larger than VariantN's size argument, a different path is chosen, and the compiler chokes. This example code showcases the effect - for small i there is no problem, but then there's an compile error when i > 16, 12, or 8 (depending on compiler and flags): struct S(int padding) { byte[padding] _; int* p; } unittest { import std.variant; static foreach (i; 0..64) {{ const S!i s; Variant a = s; }} } The code on which the compiler chokes is this: https://github.com/dlang/phobos/blob/master/std/variant.d#L699-L701 I'm unsure why larger types are treated differently. The comment on lines 667-674 seems to indicate it has to do with whether they're passed on the stack or not, but this assumption does not seem to be documented elsewhere.
Comment #1 by robert.schadek — 2024-12-01T16:36:31Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10411 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB