Thread overview
[Issue 8819] New: void static array should have init built-in propert
Oct 14, 2012
Kenji Hara
Nov 25, 2012
Kenji Hara
Dec 04, 2012
Walter Bright
Dec 04, 2012
Kenji Hara
Dec 05, 2012
Kenji Hara
Mar 06, 2013
Walter Bright
October 14, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8819

           Summary: void static array should have init built-in propert
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: k.hara.pg@gmail.com


--- Comment #0 from Kenji Hara <k.hara.pg@gmail.com> 2012-10-14 09:04:24 PDT ---
Following code doesn't work with current dmd (2.060).

void main()
{
  alias void[1] T;
  auto vsa = T.init;
}

output:
test.d(4): Error: void does not have a default initializer

I think this is unnecessary restriction and almost a bug.
An element of void[1] should have '0' as a default initializer.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 25, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8819


Kenji Hara <k.hara.pg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull


--- Comment #1 from Kenji Hara <k.hara.pg@gmail.com> 2012-11-24 19:09:42 PST ---
https://github.com/D-Programming-Language/dmd/pull/1324

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 04, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8819


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com


--- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2012-12-03 18:07:49 PST ---
I'm not convinced this is a good idea. void[] is supposed to be untyped data, and a 0 initializer is specific to some types, and not for others.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 04, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8819



--- Comment #3 from Kenji Hara <k.hara.pg@gmail.com> 2012-12-03 19:32:30 PST ---
(In reply to comment #2)
> I'm not convinced this is a good idea. void[] is supposed to be untyped data, and a 0 initializer is specific to some types, and not for others.

In almost cases, void[] and void[n] are used to represent *bare* memory. Then, 0-initialized bare memory is enough acceptable concept to me.

---
The enhancement only I argue is just to add init property. That means, default construction of void[n] should be kept invalid.

void main() {
  void[1] vsa1 = (void[1]).init;  // allowed by this enhancement
  void[1] vsa2;  // default construction should still be error
}

I think void[n] should behave as like a struct has `@disable this();`.
All structs have built-in `.init`. Therefore void[n] should also have `.init`.

---
From a view of meta-programming, I think that all types which has run-time representation should have .init property. It is consistent and much useful. Example:

template isSomeCheck(T) {
  enum isSomeCheck = is(typeof({
    T t = T.init;  // Can ignore T's constructing way.
    func(t);       // check whether func accepts an lvalue object typed T
    func(T.init);  // check whether func accepts an rvalue object typed T
  }
}

After taking this enhancement, only one type which doesn't have init property is void.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 05, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8819



--- Comment #4 from Kenji Hara <k.hara.pg@gmail.com> 2012-12-04 16:55:24 PST ---
In discussion here: https://github.com/D-Programming-Language/phobos/pull/842#issuecomment-9420485

Andrei asks why `defaultInit` is necessary, the answer is the lack of void[1].init.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 06, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=8819



--- Comment #5 from github-bugzilla@puremagic.com 2013-03-06 00:21:18 PST ---
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/a4275e7847f553a3a2c038883612af7b68117ce3 fix Issue 8819 - void static array should have init built-in property

https://github.com/D-Programming-Language/dmd/commit/c437fad3e8bc874ca8f1dcb0e77e8eb6488b5cf1 Merge pull request #1324 from 9rnsr/fix8819

Issue 8819 - void static array should have init built-in property

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 06, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=8819


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------