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.

Reply via email to