Во время своего talk в cppcon Титус Уинтерс утверждает (в 42:00), что у них есть класс Status. Что такое магия в этом классе, так это то, что C++-сборка должна завершиться неудачей, если объект Status
будет возвращен, и с ним ничего не будет сделано (обратите внимание, что можно явно позвонить IgnoreError()
, если это правильная вещь).Как предотвратить компиляцию, если статус ошибки игнорируется?
Как такое возможно?
Насколько я могу судить, класс Status
не имеет ничего особенного. Я полагаю, что они должны взломать это правило в процессе их сборки, но как это можно сделать?
это невозможно сделать то, что вы объяснили (проваливать сборки, если объект не используется, не называя это метод) –
Вы можете четко видеть в коде, который вы связали с тем, что класс 'Status' связывает строку' enum' и 'std :: string', а реализации деструктора и' IgnoreError() 'functions 'ничего не делают - в этом нет магии - поэтому, если есть какое-либо правоприменение он должен быть в каком-то инструменте статического анализа, который Google выполняет над своим кодом во время сборки ... не через стандартные функции C++. –