On Thursday, 10 September 2015 at 08:22:29 UTC, Daniel N wrote:
import std.typecons;class Awesome1 { private: int val;this(string caller = __MODULE__)(int val) if(caller == "std.conv") // Use scoped!Awesome{ this.val = val; } } class Awesome2 { private: int val; this(string caller = __MODULE__)(int val) {static assert(caller == "std.conv", "Use scoped!Awesome(...)!");this.val = val; } } void main() { static assert(__traits(compiles, scoped!Awesome1(1))); static assert(__traits(compiles, scoped!Awesome2(1))); static assert(!__traits(compiles, new Awesome1(1))); static assert(!__traits(compiles, new Awesome2(1))); }
PS 'private:' should of course be 'public:' when using this idiom.
