Re[10]: Почему вызывается test(char*)?
От: Vain Россия google.ru
Дата: 13.09.06 21:25
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Неоднозначность происходит в том случае,

Опять, я не спрашиваю почему происходит неоднозначность, я спрашиваю почему она должна происходить, улавливаешь разницу?
AD>Чтобы разрулить твою ситуацию можно сделать так:

AD>
AD>#include <iostream>

AD>template<int size> char* test(char (&str)[size])
AD>{
AD>    std::cout << "char (&str)[size]" << std::endl;
AD>    return NULL;
AD>}

AD>template<typename T> char* test(T *str);

AD>template<> char* test(char *str)
AD>{
AD>    std::cout << "char *str" << std::endl;
AD>    return NULL;
AD>}

AD>int main()
AD>{
AD>    char arr[] = "data1";
AD>    char *ptr = "data2";
AD>    test(arr);
AD>    test(ptr);
AD>    return 0;
AD>}
AD>

Если это работает на GCC, то тем более, как мне кажется, должно также и это работать:
char* test(char (&)[10]) {
  return NULL;
}
char* test(char*) {
  return NULL;
}
void main() {
  char arr[10] = "";
  test(arr); //вызов char* test(char (&)[10])
}


AD>В этом случае обе функции будут шаблонные (правда одна из них — специализированная)

под vs80 не работает

PS:
Есть здесь знатоки стандарта, что по этому поводу он говорит?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.