User-defined operators cannot return void
The purpose of a user-defined operator is to return an object.
The following sample generates CS0590:
namespace x { public class a { public static void operator+(a A1, a A2) // CS0590 { } // try the following user-defined operator /* public static a operator+(a A1, a A2) { return A2; } */ public static int Main() { return 1; } } }