Thread overview
typedef behavior with @disable this()
Feb 10, 2018
Alex
Feb 11, 2018
Simen Kjærås
Feb 11, 2018
Alex
February 10, 2018
Do I overlook something?

/// --- code --- ///

import std.typecons;

void main(){}

static assert(!__traits( compiles, E()));
static assert(!__traits( compiles, MyE())); // line 6

struct E
{
	size_t dummy;
	@disable this();
	this(size_t val) { dummy = val; }
}

alias MyE = Typedef!E;

/// --- code ends --- ///

While line 5 does not compile as expected, due to disabled default constructor, the Typedef'd type does. Why?
February 11, 2018
On Saturday, 10 February 2018 at 13:18:28 UTC, Alex wrote:
> Do I overlook something?
>
> /// --- code --- ///
>
> import std.typecons;
>
> void main(){}
>
> static assert(!__traits( compiles, E()));
> static assert(!__traits( compiles, MyE())); // line 6
>
> struct E
> {
> 	size_t dummy;
> 	@disable this();
> 	this(size_t val) { dummy = val; }
> }
>
> alias MyE = Typedef!E;
>
> /// --- code ends --- ///
>
> While line 5 does not compile as expected, due to disabled default constructor, the Typedef'd type does. Why?

Typedef explicitly initializes the wrapped value to T.init, thus circumventing the disabled default constructor. Filed a bug:

https://issues.dlang.org/show_bug.cgi?id=18415

--
  Simen
February 11, 2018
On Sunday, 11 February 2018 at 00:54:07 UTC, Simen Kjærås wrote:
>
> Typedef explicitly initializes the wrapped value to T.init, thus circumventing the disabled default constructor. Filed a bug:
>
> https://issues.dlang.org/show_bug.cgi?id=18415
>
> --
>   Simen

Thanks!