提示コードを実行するとtestクラスのコンストラクターで例外が発生する原因を知りたいです。
演算子のオーバーロードをコメントにするとエラーがなくなりますので演算子のオーバーロードが原因と思われますが。対処法がわからず困っています。
また
try catch構文を使ってその例外を出力したいのですがクラス内ではその構文がエラーになるため
使えません、
出力方法と解決法、原因などを教えてくれますでしょうか?

namespace ConsoleApp1
{
    class Program
    {

        //delegate void test_del(ref int t);

        class test
        {
            public int x { get; set; }


            public test() { }

            public static test operator +(test a, test b)
            {
                //Console.WriteLine("演算子+");
                test t = new test();

                a.x = 3;
                t = a + b;
                return t;

            }

            public void output()
            {
                Console.WriteLine("x:" + x);
            }
        }


        static void Main(string[] args)
        {
            try
            {
                test a = new test();
                test b = new test();
                test c = new test();
                c = a + b;
                c.output();
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }              
    }
}