The subj is not (any longer) supported by compiler. In fact it used to produce wrong code sometimes and now it just plainly rejects it.

It's freaking inconvenient because I can't deploy new compile-time std.regex w/o it.

The example:

enum ctr = ctRegex!"blah";

after my changes must be:

static immutable ctr = ctRegex!"blah";

Howeever I divised a trick to get equivalent functionality as follows:

template ctRegexImpl(alias pattern, string flags=[])
{
   static immutable staticRe = ...;
   struct Wrapper
   {
      @property auto getRe(){ return staticRe; }
      alias getRe this;
   }
   enum wrapper = Wrapper();
}

public enum ctRegex(alias pattern, alias flags=[]) = ctRegexImpl!(pattern, flags).wrapper;

Now ctRegex returns a neat forwarding struct that bypasses the strange limitation. The question remains though - why can't compiler do it automatically?

Reply via email to