template <typename T> class foo {};В последней строке получим ошибку, говорящую нам что шаблон foo для типа char уже определен.
template <> class foo<char> {};
typedef char bar;
template <> class foo<bar> {} // compile error
Кстати, на счет типов. Как думаете, что выдаст следующий код:
template <typename T> struct foo { static const int x = 1; };Единицу. Char, signed char и unsigned char - три разных типа. В зависимости от настроек компилятора char ведет себя как signed или unsigned, но это отдельный тип.
template <> struct foo<signed char> { static const int x = 2; };
template <> struct foo<unsigned char> { static const int x = 3; };
cout << foo<char>::x;
4 комментария:
за char спасибо, однажды я встречался с непонятным поведением программы в которой были различные char'ы.
спасибо, буду знать
оно то конечно уже полгода прошло :)
но в строке
template <> class foo<bar > {} // compile error
надо б точку с запятой после фигурной скобки поставить.
spk: ну так там же написано "compile error". Точка с запятой не стоит - вот и compile error ;-)))
Отправить комментарий