Если функция, которая выполняет эти проверки, просто выполняет те преобразования, которые не имеют побочных эффектов, оптимизатор, вероятно, оптимизирует весь этот код и не будет генерировать какой-либо код для тела функции.Осталось только символ функции и инструкция возврата.
Как выясняется (проверено с помощью GCC 4.5.1), даже символ функции не должен выдаваться.Компилятор оптимизировал получение адреса, а затем заметил, что никакой другой код в этом файле не обращается к функции, не испуская для нее код.Я думаю, что это нормально, потому что любая другая единица перевода, которая нуждается в этом определении, предоставляет само определение - так что они в любом случае не зависят от компиляции других единиц перевода.
Обратите внимание, что при использовании этого метода проверки активируются только после создания объекта Container<T>
.В противном случае конструктор Derived_from
никогда не будет создан неявно, а проверки никогда не будут выполнены.
Есть способы, которые полностью это делают без какого-либо такого фиктивного кода, как boost::is_base_of
.