Может кто-нибудь помочь мне перенести следующий код на GCC ?Я нашел много или связанных вопросов на этом сайте, но я просто не могу применить предложенные обходные пути в моем случае ...
typedef float MyData __attribute__ ((__vector_size__ (16)));
template <typename T> class Data_T
{
public:
template < typename U > static bool IsEqual (const T & a, const T & b)
{
return a == b;
}
//Fixed: template <> static bool IsEqual < MyData > ( const MyData & a, const MyData & b)
static bool IsEqual ( const MyData & a, const MyData & b)
{
return true;
}
void TriggerProblem(const T & val)
{
if (!IsEqual(1.0f, val)) // Error: no matching function for call to 'Data_T<float>::IsEqual(float, const float&)'
{
}
}
};
Код, вызывающий проблему:
Data_T<MyData> inst;
inst.TriggerProblem(1.0f);
Я получил сообщение об ошибке ошибка: явная специализация в области отсутствия пространства имен 'class Data_T' , которая была вызвана функцией специализации IsEqual () , но теперь обнаружил другой типошибки ( нет соответствующей функции для вызова 'Data_T :: IsEqual (float, const float &)' ), что, вероятно, вызвано атрибутом __ vector_size __ , который я не могуУдалить.Пожалуйста, помогите ...