Определите, какие из данных определений шаблонов функций неправильны. Исправьте ошибки.
(a) template <class T, U, class V>
void foo( T, U, V );
(b) template <class T>
T foo( int *T );
(c) template <class T1, typename T2, class T3>
T1 foo( T2, T3 );
(d) inline template <typename T>
T foo( T, unsigned int* );
(e) template <class myT, class myT>
void foo( myT, myT );
(f) template <class T>
foo( T, T );
(g) typedef char Ctype;
template <class Ctype>
Ctype foo( Ctype a, Ctype b );
Упражнение 10.2
Какие из повторных объявлений шаблонов ошибочны? Почему?
(a) template <class Type>
Type bar( Type, Type );
template <class Type>
Type bar( Type, Type );
(b) template <class T1, class T2>
void bar( T1, T2 );
template <typename C1, typename C2>
void bar( C1, C2 );
Упражнение 10.3
Перепишите функцию putValues() из раздела 7.3.3 в виде шаблона. Параметризуйте его так, чтобы было два параметра шаблона (для типа элементов массива и для размера массива) и один параметр функции, являющийся ссылкой на массив. Напишите определение шаблона функции.