LINUX.ORG.RU

История изменений

Исправление khrundel, (текущая версия) :

С чего вдруг? Какой-то отладочный режим и прочая чушь - сразу мимо. Меня мало интересуют попытки навязать мне свои фантазии.

Видимо это слишком сложно для тебя. Попробуй прочитать ещё раз.

Ладно, тебе сложно, объясняю на пальцах: твоё тупое свинае завязывает выбор реализации на фактический код, присутствующий в теле шаблона, а не на его прототип. А фактический код может меняться в зависимости от флагов компиляции. Например:

#if DEBUG
#define TRACE(x) std::cout<<__FILE__<<":"<<__LINE__<<" "<<#x<<(x)<<std::endl;
#else
#define TRACE(x) ;
#endif

Ну, или если хочешь, можешь запилить аналогичный трейс на шаблоне.

Далее ты добавляешь внутрь одного из шаблонов, самого специализированного безобидную строку TRACE(value) и всё. В случае компиляции без -DDEBUG будет выбираться этот шаблон, в случае c -DDEBUG - другой, менее специализированный. Программа будет вести себя странно. А всё от того, что для какого-то типа не написана перегрузка operator <<.

Исходная версия khrundel, :

С чего вдруг? Какой-то отладочный режим и прочая чушь - сразу мимо. Меня мало интересуют попытки навязать мне свои фантазии.

Видимо это слишком сложно для тебя. Попробуй прочитать ещё раз.