реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Глючок?, IAR C/C++ Compiler for AVR 5.11B/W32 (5.11.2.5)
Непомнящий Евген...
сообщение Jun 30 2008, 07:18
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Следующий код при компиляции выдает ошибку
Error[Pe304]: no instance of function "funcA" matches the argument list
argument types are: (int *)
detected during instantiation of "void funcT(T &) [with T=int]"

Код
static void funcA(void *p) {}

template<class T>
void funcT(T &t)
{
  funcA(&t);
}

void test()
{
  int t;
  funcT(t);
}


Если убрать квалификатор static у funcA либо вызвать ее напрямую из test, либо сделать funcT не шаблонной, либо просто явно привести тип указателя к void* - все ок.

И Visual C и GCC компилят нормально.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Jul 1 2008, 05:04
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Iar-овцы говорят, что так и должно быть по стандарту.
"This is how it should behave if you are as strict as we are in regards to
the standard."

И предложили еще один путь обхода:
Код
template<class T>
void funcT(T &t)
{
  ::funcA(&t);
}
Go to the top of the page
 
+Quote Post
meister
сообщение Jul 1 2008, 12:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Непомнящий Евгений @ Jul 1 2008, 09:04) *
Iar-овцы говорят, что так и должно быть по стандарту.
"This is how it should behave if you are as strict as we are in regards to
the standard."


Надо было привести этот пункт стандарта smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016