Единственное, что вы можете сделать, это сделать конструкторы приватными и принудительно получить доступ через вспомогательную функцию. Это намного менее похоже на первоначальный синтаксис конструкции и менее вероятно, что оно будет ошибочным. Вы также можете выделить в куче (все еще пустая трата времени), но это гораздо легче обнаружить. Однако, если вы хотите, чтобы ваш класс был конструируемым, вы не можете помешать людям создавать значения этого типа.
Редактировать: Если вы знаете, что MySentryClass всегда принимает аргумент, вы можете запретить конструкцию AND и разрешить только оператор = (аргументы). Это заставит вас сделать
MySentryClass x;
x = arg;
Вы могли бы сделать какую-то цепочку методов для этого.
MySentryClass x;
x.SetArg1(arg).SetArg2(arg2).construct();