Обычно вы бы не помещали реализации шаблонов в .cpp, а скорее в .h или .inl, который включен из .h, возможно, что отладочная сборка .o более либеральна с символами, которые она экспортирует..
Запустите nm
в сборках отладки и выпуска .o и разведите символы.
Шаблоны необычны в компоновщиках из-за правила единого определения.Когда дело доходит до шаблонов, где тело находится в заголовке, это приводит к множественным эквивалентным определениям, по одному на каждую единицу перевода.Компоновщик позволяет им оставаться до последнего момента, когда он произвольно выбирает один и отбрасывает остальные.
Я предполагаю, что здесь, но я подозреваю, что когда вы компилируете без оптимизаций, тело обрабатывается как обычно, но когдаОптимизация на компиляторе тратит немного дополнительных усилий, определяя, что это тело не видно в других единицах перевода , и отказывается экспортировать его.
Поиск внешние шаблоны .