Перегрузка унарного оператора отрицания в D - PullRequest
5 голосов
/ 07 августа 2011

Код

struct test
{
   private real value;

   this(real value)
   {
      this.value = value;
   }

   bool opUnary(string op)() if (op == "!")
   {
      return !value;
   }
}

void main()
{
   test a = 123.12345;
   bool b = !a;
}

Ошибка компиляции

prog.d(19): Error: expression a of type test does not have a boolean value

http://ideone.com/Kec81

Также протестировано на dmd 2.053, 2.054

Что такоене так с моим кодом?

1 Ответ

3 голосов
/ 07 августа 2011

Вы не можете перегрузить оператор ! в D - см. http://www.d -programming-language.org / operatoroverloading.html # Unary для получения списка перегружаемых унарных операторов.Не зная, что вы делаете, трудно предложить обходной путь, хотя, возможно, стоит посмотреть на alias this - http://www.d -programming-language.org / class.html # AliasThis .

...