2014-12-04 3 views
3

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

Как такое возможно?

Насколько я могу судить, класс Status не имеет ничего особенного. Я полагаю, что они должны взломать это правило в процессе их сборки, но как это можно сделать?

+0

это невозможно сделать то, что вы объяснили (проваливать сборки, если объект не используется, не называя это метод) –

+3

Вы можете четко видеть в коде, который вы связали с тем, что класс 'Status' связывает строку' enum' и 'std :: string', а реализации деструктора и' IgnoreError() 'functions 'ничего не делают - в этом нет магии - поэтому, если есть какое-либо правоприменение он должен быть в каком-то инструменте статического анализа, который Google выполняет над своим кодом во время сборки ... не через стандартные функции C++. –

ответ