Re[2]: Невероятно, но факт! Не константные значения в компай
От: remark Россия http://www.1024cores.net/
Дата: 06.02.07 22:27
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Хм... Оригинально, но не понятно, должно ли это работать так, как задумано. Как известно, friend declaration не вводит в охватывающий namespace видимого имени. Поэтому не ясно, почему в твоем случае при второй инстанциации 'magic' lookup для дефолтного аргумента вдруг должно найти именно "друга", а не явно объявленную оригинальную версию 'engine'...


Да, friend declaration не вводит в охватывающий namespace видимого имени. Всё правильно. Над этой проблемой пришлось побороться.
На помощь пришёл ADL! Смотри:

class complex
{
  ...
  friend complex operator + (complex, complex);
};

complex c1, c2;
c1 + c2;


Это же работает, хотя тоже вроде как не должно, т.к. operator + () вообще говоря не виден вне класса.

Поэтому я добавил в функцию engine() параметр magic&! Теперь она тоже попадает в рассмотрение!

АТ>На Comeau Online — не работает. А именно, оба 'magic<>::val' одинаковы.


Да, я знаю... это не ко мне, это к ним


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.