Для сохраненного proc возможно быть уязвимым для специальных типов Внедрения SQL через переполнение/усечение, видеть: Инжекция, Включенная Усечением Данных здесь:
Оба компилятора прямо здесь; поведение для вашего случая не указано. ISO C ++ 14.7.1 [temp.inst] / 9:
Реализация не должна неявно создавать экземпляр шаблона функции, шаблона члена, невиртуальной функции-члена, класса-члена или статического члена данных шаблона класса, который не требует создания экземпляра. Не указано, создает ли реализация неявно виртуальную функцию-член шаблона класса , если виртуальная функция-член не создавалась бы в противном случае.
Причина этого довольно проста: виртуальная функция требует запись vtable, а при виртуальной отправке компилятору может быть сложно определить, действительно ли вызывается данная виртуальная функция или нет. Следовательно,
Удаление неиспользуемых функций произойдет при компоновке , а не при компиляции, в которой возникла ошибка. MSVC может не знать, кто из всех компилируемых единиц компиляции в конечном итоге вызовет этот метод. Это может' Не знаю, пока не завершится компиляция и пока не произойдет связывание. Естественно, разные компиляторы могут быть более умными в этом вопросе, но я подозреваю, что это может быть то, что происходит.
Я подозреваю, что ваши конкретные ошибки компилятора звучат так, как будто они вызваны тем, что вы только объявили вперед
template<typename C>
struct c_traits;
, вы не полностью указали класс. Вы пробовали что-нибудь простое, например:
template<typename C>
struct c_traits
{
// some default/dummy int type
};
Я подозреваю, что это, по крайней мере, остановит компилятор от жалоб.
РЕДАКТИРОВАТЬ
это вообще неправильно для класса шаблоны. Функции-члены класса шаблоны не должны быть скомпилированы (и любые ошибки в их тела не должны быть запущен), если они не созданы.
Шаблон создается в этом случае в форме:
foo<short>
Компилятор будет рассматривать это как любой другой класс, методы которого имеют потенциал для внешней связи. Я не слышал какого-либо специального языкового правила, в котором говорилось бы, что внешняя связь не применяется к шаблонам ...?