У меня есть проблема с ошибкой компилятора, посмотрите на этот код:Компилятор игнорирует «сопзЬ» на параметр функции
template<class T>
struct MyStruct
{
};
template<>
struct MyStruct<int>
{
typedef int* type;
};
template<class T>
void foo(const typename MyStruct<T>::type myType)
{
}
int main()
{
const int* ptr = NULL;
foo<int>(ptr);
return 0;
}
Проблема заключается в том, что компилятор игнорирует «Const» на функции Foo, делая вызов foo незаконным (const int * to int *).
Тяжесть Код Описание проекта State Line File Подавление Error 'недействительным Foo (сопзЬ MyStruct :: тип)' C2664: не удается преобразовать аргумент 1 из 'Const ИНТ *' до 'сопзЬ MyStruct :: типа'
Я протестировал следующий код в Visual Studio и gcc 5.3 complier, оба из которых сбросили ту же ошибку.
Выполняет ли это соблюдение специально? почему это происходит?
'const int * ptr' не является указателем константы, это указатель на const. – juanchopanza