Я нашел этот кусок кода поддельного (надуманный пример ниже):шаблона специализация с преобразованием типа
template <int I, typename T>
struct foo
{
static int bar()
{
return 1;
}
};
template <std::size_t Index, typename T>
struct foo<Index, T*>
{
static int bar()
{
return 2;
}
};
Пожалуйста, обратите внимание, что специализация использует другой тип (по ошибке). Удивительно, что он компилируется без каких-либо ошибок (или предупреждений) как с GCC 4.8.1, так и с Clang 3.4. Но что еще более странно для линии GCC foo<0, int*>::bar()
приводит к 1
, но Clang дает 2
. Что происходит? До сих пор ли он считается специализацией по стандарту?
Специализация size_t должна быть ошибкой (int! = Size_t) –
Итак, оба компилятора ошибочны? Звучит вполне ... невероятно ;-) – magor
Почему вы, ребята, думаете, что это специализация? – us2012