https://issues.dlang.org/show_bug.cgi?id=11307
--- Comment #3 from Kenji Hara <k.hara...@gmail.com> --- (In reply to monarchdodra from comment #0) > ".init" is a global property, that is marked as rvalue, to prevent it being > modified. This is correct behavior. > > However, when "T" is const/immutable already, then it is illegal to modify > it anyways. Making ".init" an lvalue for such cases has advantages. Not only to prevent its modification, T.init makes an rvalue to prevent copy construction on its usage. auto t = T.init; If T.init returns an lvalue, initializing t will always invoke T's postblit if exists. --