Re[11]: Перегрузить <<
От: Шахтер Интернет  
Дата: 30.05.04 05:28
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

Че-то у меня крыша едет.
Пример.

/* main.cpp */ 

#include <iostream>

using namespace std;

/* main() */ 

template <class T>
void test(const T &) { cout << "1\n" ; }

void test(const char *) { cout << "2\n" ; }

int main()
 {
  test("x");
  
  char *c=0;
  
  test(c);
 
  return 0;
 }


VC++ 7.1 /Za печатает 2 1
Intel C++ 8.0 печатает 1 1

Кто больше?
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[12]: Перегрузить <<
От: Павел Кузнецов  
Дата: 30.05.04 06:09
Оценка:
>
> template <class T>
> void test(const T &) { cout << "1\n" ; }
>
> void test(const char *) { cout << "2\n" ; }
>
> int main()
>  {
>   test("x");
>  char *c=0;
>  test(c);
>  return 0;
>  }
>

>
> VC++ 7.1 /Za печатает 2 1
> Intel C++ 8.0 печатает 1 1

У Интела ошибка, присутствовавшая в старой версии Comeau; она меня раньше
Автор: Павел Кузнецов
Дата: 08.12.03
тоже смутила. В Comeau 4.3.3, использующем более новый EDG-front end, результат совпадает с VC++7.1. Правильным ответом является "2 1".
Posted via RSDN NNTP Server 1.9 alpha
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Перегрузить <<
От: Павел Кузнецов  
Дата: 30.05.04 06:47
Оценка:
> ПК>
> ПК>void test(char const *&);
> ПК>void test(const char (&)[2]);
> ПК>

>
> А вот здесь нет ambiguty.

Да, конечно — ссылка в первом случае должна быть тоже константной, т.к. результат преобразования — rvalue.
Posted via RSDN NNTP Server 1.9 alpha
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.