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.

Reply via email to