LINUX.ORG.RU

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

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

мне было не понятно, почему для дедукции типов в шаблонных функциях при передаче параметром char[N] нужно, чтобы параметр был ссылкой на массив. т.е. было не понятно, почему не #1, а #2:

#1 template <int size> void strcpy_s(char strDestination[size]);
#2 template <int size> void strcpy_s(char (&strDestination)[size])

intelfx правильно подсказал на счет свертывания типов:

14.8.2.1 Deducing template arguments from a function call [temp.deduct.call]

Template argument deduction is done by comparing each function template parameter type (call it P) with the type of the corresponding argument of the call (call it A) as described below.

If P is not a reference type:

-- If A is an array type, the pointer type produced by the array-to-pointer standard conversion (4.2) is used in place of A for type deduction; otherwise,

ссылка тут, судя по спеке, специальный костылик.

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

мне было не понятно, почему для дедукции типов в шаблонных функциях при передаче параметром char[N] нужно, чтобы параметр был ссылкой на массив. т.е. было не понятно, почему не #1, а #2:

#1 template <int size> void strcpy_s(char strDestination[size]);
#2 template <int size> void strcpy_s(char (&strDestination)[size])

intelfx правильно подсказал на счет свертівания типов:

14.8.2.1 Deducing template arguments from a function call [temp.deduct.call]

Template argument deduction is done by comparing each function template parameter type (call it P) with the type of the corresponding argument of the call (call it A) as described below.

If P is not a reference type:

-- If A is an array type, the pointer type produced by the array-to-pointer standard conversion (4.2) is used in place of A for type deduction; otherwise,

ссылка тут, судя по спеке, специальный костылик.