История изменений
Исправление 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, :
С чего вдруг? Какой-то отладочный режим и прочая чушь - сразу мимо. Меня мало интересуют попытки навязать мне свои фантазии.
Видимо это слишком сложно для тебя. Попробуй прочитать ещё раз.