Насколько я понимаю, специализация шаблонов работает следующим образом
template<typename T>
void dummy(T a) { std::cout<<a<<std::endl; }
template<>
void dummy<int>(int a) { std::cout<<"special"<<std::endl; }
Я искал следующий код, который проверяет, является ли что-то указателем или нет:
template<typename T>
struct is_ptr {
constexpr static bool value = false;
};
template <typename T>
struct is_ptr<T*> {
constexpr static bool value = true;
};
Это все ещешаблонная специализация? Почему линия template <typename T>
там опять в специализации, а не <>
. Это потому, что компилятор генерирует несколько специализаций, когда у нас есть T*
, а не T
?
Будет ли этот код расширяться до
template<>
struct is_ptr<int*>
{
constexpr static bool value = true;
};
?