D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 7038 - Type mismatch with const struct
Summary: Type mismatch with const struct
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: Other Windows
: P2 normal
Assignee: No Owner
URL:
Keywords: pull
Depends on:
Blocks:
 
Reported: 2011-11-30 09:33 UTC by SHOO
Modified: 2012-03-04 13:29 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description SHOO 2011-11-30 09:33:19 UTC
This code should be compiled:
------------------
A a;
const struct A { }
A b;

static assert(is(typeof(a) == typeof(b))); // Error: static assert  (is(A == const(A))) is false
Comment 1 Kenji Hara 2011-12-28 23:54:51 UTC
From http://d-programming-language.org/struct.html

> Const and Invariant Structs
> 
> A struct declaration can have a storage class of const, immutable or shared.
> It has an equivalent effect as declaring each member of the struct as const,
> immutable or shared.

Then the definition of const struct A {} should translated to:

struct A { const: (members...) }

But, instead, current dmd implementation does like follows:

struct __S { int a; int b = 2; }
alias const(__S) S;

--------

But, the documentation also has some inconsistent.
See bug 7180.
Comment 3 github-bugzilla 2012-03-04 11:52:33 UTC
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/a1e33827c83f14004c4fd31ff665e6312ca59385
fix Issue 7038 - Type mismatch with const struct

https://github.com/D-Programming-Language/dmd/commit/2e523c415a54c7f344d18898a50e9f896e4b1a15
Merge pull request #783 from 9rnsr/fix7038

Issue 7038 - Type mismatch with const struct