struct A { int opBinary(string op)(A) { k++; return 0; } } struct B { A __a; alias __a this; } void main() { B b; auto c = b * b; } This code doesn't compiles with an error: Error: 'b' is not of arithmetic type, it is a B If i remove k++, then it's OK. It seems that compiler omitting the function if there an error in it.