Re: Невероятно, но факт! Не константные значения в компайл-т
От: Андрей Тарасевич Беларусь  
Дата: 06.02.07 21:39
Оценка: 3 (1) +1
Здравствуйте, remark, Вы писали:

R>Сейчас вы увидите, как на стандартном с++ можно иметь переменные значения в компайл-тайм!


R>
R>char engine(...);

R>template<typename, int> struct magic;
R>typedef magic<char, -1> magicc;

R>template<typename type = int, int id = sizeof(engine(*(magicc*)0, *(type*)0))>
R>struct magic
R>{
R>    friend int engine(magicc&, type&);
R>    static const int val = id;
R>};

R>int main()
R>{
R>    char a[magic<>::val != magic<>::val ? 1 : -1];
R>}
R>


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

На Comeau Online — не работает. А именно, оба 'magic<>::val' одинаковы.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.