www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Null argument and function resolution

reply "Andrea Fontana" <nospam example.com> writes:
Check this example:
http://dpaste.dzfl.pl/53f85bae4382

Calling with null, both c-tor match.
Is there a way to solve this?

Something like:

this(in ubyte* data) if( ??? )
{

}


Andrea
May 27 2015
parent reply "Adam D. Ruppe" <destructionator gmail.com> writes:
Two options:

1) add an overload that takes typeof(null)

this(typeof(null)) { /* handles the null literal specially */ }

2) Cast null to a specific type when making it:

new YourClass(cast(ubyte*) null);
May 27 2015
next sibling parent "Andrea Fontana" <nospam example.com> writes:
The first answer is the one I was looking for. Very useful.
You should add to next "this week in d" tips.

On Wednesday, 27 May 2015 at 14:09:48 UTC, Adam D. Ruppe wrote:
 Two options:

 1) add an overload that takes typeof(null)

 this(typeof(null)) { /* handles the null literal specially */ }

 2) Cast null to a specific type when making it:

 new YourClass(cast(ubyte*) null);
May 27 2015
prev sibling parent reply ketmar <ketmar ketmar.no-ip.org> writes:
On Wed, 27 May 2015 14:09:47 +0000, Adam D. Ruppe wrote:

 Two options:
=20
 1) add an overload that takes typeof(null)
=20
 this(typeof(null)) { /* handles the null literal specially */ }
you keep breaking my "box of thinking". ;-) never thought about such=20 declaration.=
May 27 2015
parent reply "Meta" <jared771 gmail.com> writes:
On Wednesday, 27 May 2015 at 19:38:16 UTC, ketmar wrote:
 On Wed, 27 May 2015 14:09:47 +0000, Adam D. Ruppe wrote:

 Two options:
 
 1) add an overload that takes typeof(null)
 
 this(typeof(null)) { /* handles the null literal specially */ }
you keep breaking my "box of thinking". ;-) never thought about such declaration.
Unfortunately, there is no equivalent way to disable assignment of [] at compile time. struct ArrayWrapper(T) { T[] a; this(T[] arr) { a = arr; } //Doesn't work; Conflicts with this(T[] arr) // disable this(typeof(this)[]); //Doesn't work; hijacked by this(T[] arr) // disable this(typeof([])); }
May 27 2015
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 05/27/2015 10:09 PM, Meta wrote:
 On Wednesday, 27 May 2015 at 19:38:16 UTC, ketmar wrote:
 On Wed, 27 May 2015 14:09:47 +0000, Adam D. Ruppe wrote:

 Two options:

 1) add an overload that takes typeof(null)

 this(typeof(null)) { /* handles the null literal specially */ }
you keep breaking my "box of thinking". ;-) never thought about such declaration.
Unfortunately, there is no equivalent way to disable assignment of [] at compile time. struct ArrayWrapper(T) { T[] a; this(T[] arr) { a = arr; } //Doesn't work; Conflicts with this(T[] arr) // disable this(typeof(this)[]); //Doesn't work; hijacked by this(T[] arr) // disable this(typeof([])); }
https://issues.dlang.org/show_bug.cgi?id=7007
May 27 2015