How to check at compile time if Default Constructor for a class exists?
Adam D. Ruppe via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jan 1 08:13:47 PST 2016
On Friday, 1 January 2016 at 15:55:53 UTC, Bottled Gin wrote:
> That gives me a false positive if a defined constructor has
> default value for all its arguments.
I thought that counted as a default constructor...
But if not, you could also try this on for size:
template HasDefaultConstructor(Class) {
bool helper() {
foreach(overload; __traits(getOverloads, Class, "__ctor")) {
static if(__traits(compiles, { Class function() ctor =
&overload; }))
return true;
}
return false;
}
enum HasDefaultConstructor = helper();
}
The helper loops through all the overloads looking for one that
is assignable to a zero-arg pointer - meaning it matches the
default signature, ignoring default params.
Then it just returns if it found one.
More information about the Digitalmars-d
mailing list