[01:30:59] <vlad2> слабо объявить указатель на костантный мембер? :)
[02:12:43] <valexеy> vlad2: зачем? :-)
[02:13:23] <vlad2> Надо :)
[02:14:30] <vlad2> Неконстантный: T Class::*member
[02:16:17] <valexеy> Какие проблемы? struct A {const int b;}; A a = A{10}; const int* p_b = &a.b;
[02:22:01] <vlad2> Не указатель на int, а указатель на мембер типа int :)
[02:22:39] <valexеy> э? дык я и получил указатель на мембер типа инт :-)
[02:22:51] <valexеy> мембер класса A
[02:23:37] <valexеy> ну, или покажи отличия :-)
[02:37:07] <valexеy> vlad2: таки йа прафф? ;-)
[02:39:21] <vlad2> Мне нужен такой поинтер, чоб можно было сделать: int v = object->*p
[02:41:07] <valexеy> эмм... я не понимаю. зачем тебе для ссылки на банальный  int иметь ДВА указателя (на объект в котором оно лежит и на сам инт) ,
[03:00:55] <vlad2> Потому что у меня не один объект, а контэйнер ;)
[03:01:10] <vlad2> Таки мак гикнулся...
[03:01:13] <vlad2> Опять завис.
[03:01:24] <vlad2> Фуцк!
[03:05:29] <valexеy> vlad2: эмм.. огласи задачку без упрощений до уровня инта тогда.
[03:05:50] <valexеy> кто у тебя там? вектор?
[03:09:19] <vlad2> Вектор объектов. Алогритм, который ищет что-то по полю. Сделать так, чтоб алгоритм искал по люому полю, заданному извне.
[03:09:46] <vlad2> Классический случай применения указателя на мембер.
[03:10:06] <valexеy> оу. это вам батенька нужен относительное смещение от начала объекта а не указатель!
[03:10:23] <vlad2> Указатель на мембер это и есть относительное смещение ;)
[03:10:31] <vlad2> Ты давно на С++ не писал ;)
[03:10:42] <valexеy> нифига. указатель это указатель :-)
[03:10:46] <vlad2> смещение - это си без плбюсов :)
[03:10:56] <valexеy> угу. я помню что там была заморочка с указателем на функцию-ччленн
[03:11:25] <vlad2> Чтоб получить реальный указатель тебе нужен и объект и указатель на мембер.
[03:11:54] <vlad2> Зато один указатель на мембер можно использовать для разных объектов.
[03:12:08] <valexеy> ну я и говорю - тупо смещение :-)
[03:12:59] <valexеy> а какой у этого "указателя" тип будет?
[03:13:11] <valexеy> ваще, реквестую пример!
[03:13:21] <valexеy> (для не константы)
[03:19:28] <valexеy> а, сам уже написал пример.
[03:19:33] <valexеy> не приходя в сознание.
[03:20:54] <valexеy> ну да. там смещение и лежит. тупо
[03:23:28] <valexеy> vlad2: вот тебе твоя константа
[03:23:30] <valexеy> struct A {
   int b;
   const int c;
};

int main() {
   A a = A{10,20};
   const int A::*b = &A::c;
   return 0;
}
[03:27:58] <valexеy> вообще, как только люди не извращаются лишь бы лямбду не использовать/не вводить в язык :-)
[03:28:13] <valexеy> по сути этот механизм в плюсах обречен на вымирание
[03:35:19] <valexеy> vlad2: слушай, а ведь в Обероне с этим жопа. Офсет там не выдать - ведь это ж безопасный язык, это вам не Си. Лямбды там тоже нет. То есть придется закатывать солнце в ручную. Долго муторно и многословно.
[03:36:14] <valexеy> Ой, а ведь и многословно не получится - указатель/ссылку на поле рекорда ведь там не получить без система.
[03:36:42] <valexеy> Эмм... То есть остается один способ по сути - через рефлекшн? o_O
[08:03:14] <egp> маздааай
[08:03:25] <egp> GWT прилада жрёт 40 % CPU
[08:03:39] <egp> то ли ГВТ виноват то ли руки девелуперов кривы
[08:04:47] <egp> причём не кратковременное пожирание проца а лонг-тёрм
[08:17:24] <egp> месяц работало без таких проблем и тут нате
[08:17:40] <egp> короче GWT и GAE оч фигово сделаны
[08:23:15] <egp> не пойду в гугл работать, гугл либы маздай
[15:45:04] <alexey.veselovsky> agf: возможно это проблема лишней секунды
[15:45:08] <alexey.veselovsky> перезапускать не пробовали?
[15:45:13] <alexey.veselovsky> jvm в смысле
[16:18:53] <egp> пересоздал воркспаце эклипсы. это помогло
[16:21:51] <egp> завтра буду отпуск выбивать
[16:26:44] <egp> поеду с девушком знакомиться
[16:27:22] <alexey.veselovsky> куда? :-)
[16:27:35] <egp> на чёрмный морь
[16:27:46] <alexey.veselovsky> фе. там же жарко!
[16:27:52] <alexey.veselovsky> /me поедет на соловки
[16:28:11] <egp> а я на море вообще не был.
[16:29:30] <alexey.veselovsky> дык тебе же владивосток ближе чем черное море вроде как
[16:29:45] <egp> ну ей чёрмное ближе
[16:29:54] <egp> а мне ближе байкал
[16:30:51] <alexey.veselovsky> ну, байкал, строго говоря, не море
[16:30:55] <egp> омулёчку как-нибудь взять в магазе...
[16:31:16] <egp> в ангарске я всё время в магазе омуля брал
[16:31:32] <egp> нежное такое мясо
[16:32:22] <egp> а тут я ещё не разведал где именно продают
[16:39:07] <egp> alexey.veselovsky, соловецкий пляж - это Белое море?
[16:40:53] <alexey.veselovsky> угу
[16:41:44] <egp> я тут месяца два назад читал дневник одного монаха, его при советской власти туда сослали. Житуха там была оч несладкая
[16:42:12] <egp> в послереволюционные годы
[16:42:50] <egp> с оптиной пустыни монах
[16:44:00] <egp> дневник иеромонаха Никона Беляева.
[16:44:39] <alexey.veselovsky> туда много кого ссылали :-)
[16:57:21] <alexey.veselovsky> * Nata Svift входит в конференцию c_plus_plus
<Nata Svift> привет всем. у меня вопрос
<cutwater> ооо женщина )))
<ForNeVeR> Женщина? Что это?
<0xd34df00d> ForNeVeR: объект из реальной жизни.
<0xd34df00d> ForNeVeR: не отвлекайся, пиши код.
[17:02:57] <egp> я тут думал-думал. и придумал что браузеры и джаваскрипит мне совсем не по пути
[17:03:17] <egp> что я хочу в процовые конторы и мне надо разведывать процы и оптимизации
[17:03:34] <egp> так что вот
[17:03:43] <alexey.veselovsky> ну напиши эмулятор проца :-)
[17:04:08] <alexey.veselovsky> а потом изучи vhdl и попробуй что-нибудь сваять
[17:04:23] <alexey.veselovsky> а потом то что сваял и погонял, зашей в fpga и посмотри реально ли оно взлетит
[17:04:26] <egp> ну я лучше компилеры оптимизирующие буду ваять
[17:04:34] <egp> чем процы
[17:05:23] <alexey.veselovsky> ну, ок. возьми проц что попроще, ну например msp430, и попробуй под него написать оптимизирующий компилятор чего-нибудь простого. ну, например оберона
[17:05:38] <egp> а оно надо тебе?
[17:05:49] <alexey.veselovsky> ога. ибо см. http://oberspace.dyndns.org/index.php/topic,281.0.html
[17:05:58] <alexey.veselovsky> msp430 дофига где используется
[17:06:02] <egp> оки
[17:06:16] <alexey.veselovsky> ну то есть оно явно более распространенное чем все x86 вместе взятые
[17:06:55] <egp> а может не гну а на коммерческой базе продавать-демпинговать? кто-нить хочет быть начальником конторы? я не хочу
[17:07:29] <egp> alexey.veselovsky, ты не хочешь продавать?
[17:07:37] <alexey.veselovsky> а у тебя есть капитал чтобы оплачивать кому-то работу начальника конторы? :-)
[17:07:45] <egp> ну ладно
[17:07:50] <egp> нафиг. пусь будет гну
[17:08:02] <alexey.veselovsky> gnu not unix :-)
[17:08:09] <alexey.veselovsky> при чем тут этот набор тулзов вообще?
[17:08:55] <egp> лицензию поменяю на паблик домейн, уболтал
[17:09:19] <egp> или не буду менять
[17:09:26] <egp> тогда лицензия гну
[17:09:30] <alexey.veselovsky> можешь сделать апач или mit
[17:09:31] <egp> v3
[17:09:41] <alexey.veselovsky> лицензия gpl а не gnu :-)
[17:10:06] <egp> GNU Pu Lic
[17:10:35] <egp> надо сделать ДЕСЯТЬ лицензий одному проекту. Для понтов
[17:10:41] <egp> или СТО
[17:10:44] <alexey.veselovsky> General Public License
[17:10:47] <alexey.veselovsky> GPL
[17:10:48] <egp> а ок
[17:13:04] <egp> GNU GENERAL PUBLIC LICENSE
[17:13:16] <egp> http://www.gnu.org/licenses/gpl.html
[17:13:51] <alexey.veselovsky> ну это примерно как Microsoft Eula
[17:14:01] <alexey.veselovsky> первое слово - чья это лицензия
[17:14:12] <alexey.veselovsky> а уже потом название самой лицензии
[19:13:34] <vlad3> по поводу указателя
[19:13:44] <vlad3> там конечно хитрее было
[19:14:09] <vlad3> там был темплейт
[19:14:14] <alexey.veselovsky> ну, в терминах той задачи что ты обрисовал, мне помог тупо const, ну, ты же видел код
[19:14:18] <vlad3> функция
[19:14:21] <alexey.veselovsky> оно работает
[19:14:33] <vlad3> А без const?
[19:14:49] <alexey.veselovsky> в смысле?
[19:15:11] <alexey.veselovsky> указатель на константу-мембер работает атлична
[19:15:28] <vlad3> Так вот, но упорно не хотел дедьюсать тип, пока объект не кастался к некостантному
[19:15:36] <alexey.veselovsky> const int A::*b = &A::c;
[19:15:41] <alexey.veselovsky> э?
[19:15:56] <alexey.veselovsky> объект не константный, как панимаешь.
[19:16:09] <vlad3> Вот если этот &A::c передать в функцию
[19:16:10] <alexey.veselovsky> но если тебе нужно было на функцию-член, то наверняка будет сложнее
[19:16:24] <vlad3> то он не хочет дедьюсать T
[19:17:04] <vlad3> f(a, &A::c); // cannot deduce...
[19:17:16] <vlad3> template <typename T>
[19:17:54] <vlad3> f(T const& a, int T::*c);
[19:18:07] <alexey.veselovsky> блин. не навижу смайлы
[19:18:20] <alexey.veselovsky> полное объявление f давай
[19:18:33] <alexey.veselovsky> это ж наверняка не функция нифига, а шаблон какой-нибудь голимый
[19:18:34] <vlad3> Это полное объявление
[19:18:40] <alexey.veselovsky> а, вижу
[19:18:44] <alexey.veselovsky> йа тормоз
[19:19:57] <vlad3> Так вот, жуткий static_cast помогает
[19:19:58] <alexey.veselovsky> правда функция у тебя без типа, ну да ладно :-)
[19:20:21] <vlad3> Но я думал, что в самом объявлении шаблона можно докрутить чего
[19:20:34] <alexey.veselovsky> const.cpp:6:28: note: candidate template ignored: failed template argument
     deduction
[19:21:00] <vlad3> Потом забил, убрал static_cast и просто написал f<A>(a, &A::c);
[19:21:09] <vlad3> Угу, это оно.
[19:22:18] <vlad3> Собственно вопрос - как написать темплейт, чтоб оно работало без явной специализации.
[19:22:53] <vlad3> И без static_cast
[19:22:58] <alexey.veselovsky> ну вот, я только хотел предложить писать f<A>(b);
[19:23:01] <alexey.veselovsky> :-)
[19:23:09] <vlad3> И без boost:implicit_cast :)
[19:24:57] <vlad3> По поводу того, что указатели на мемберы в плюсах от бедности - согласен :)
[19:25:14] <vlad3> Но лучше такое, чем вообще никак как в обероне :)
[19:25:30] <alexey.veselovsky> ну, теперь то в плюсах они не нужны - есть же лямбды :-)
[19:25:34] <alexey.veselovsky> в языке
[19:26:23] <vlad3> Мне это пока не гроит. У меня даже auto нет.
[19:27:01] <vlad3> Кстати, вчера была полная оранжевая луна. Где обострение на форуме? :)
[19:27:02] <alexey.veselovsky> ужоз
[19:27:12] <alexey.veselovsky> лето…
[19:27:54] <alexey.veselovsky> гм. а для не константы прокатывает однако
[19:28:01] <alexey.veselovsky> то есть вполне выводит тип.
[19:28:05] <alexey.veselovsky> сиволоч
[19:29:39] <vlad3> Ссылка пробегала на оборонкоре: http://blogerator.ru/page/ugolovnoaja-otvetstvennast-za-ispolzovanie-vareza
[19:29:57] <vlad3> Угу, об чем и речь.
[19:30:09] <alexey.veselovsky> стоп. у меня заработало и с константой.
[19:30:16] <alexey.veselovsky> struct A {  
  const int c;
  A():c(10){}
};

template <typename T> void f(const int T::*c){}

int main() {
  A a;
  const int A::*b = &A::c;
  f(b);
  return 0;
}
[19:31:23] <vlad3> Не, так нечестно - это тот самый оригинальный static_cast
[19:31:38] <alexey.veselovsky> э?
[19:31:45] <alexey.veselovsky> где статик каст?
[19:31:57] <alexey.veselovsky> а, ты хочешь без промежуточной переменной?
[19:32:01] <vlad3> Хотя правильнее boost::implicit_cast
[19:32:15] <vlad3> Да, в месте вызова.
[19:32:52] <alexey.veselovsky> struct A {  
  const int c;
  A():c(10){}
};

template <typename T> void f(const int T::*c){}

int main() {
  A a;
  f(&A::c);
  return 0;
}

[19:32:55] <alexey.veselovsky> работает
[19:33:22] <vlad3> А теперь еще с одним аргументом ;)
[19:33:41] <alexey.veselovsky> с каким?
[19:34:02] <vlad3> Оно у тебя и без const будет работать в таком виде.
[19:34:21] <vlad3> добавь T const& a
[19:35:03] <alexey.veselovsky> #include <stdio.h>

struct A {  
  const int c;
  A():c(10){}
};

template <typename T> void f(const int T::*c, T* t){printf("%d\n", t->*c);}

int main() {
  A a;
  f(&A::c, &a);
  return 0;
}

[19:35:07] <alexey.veselovsky> работает :-)
[19:35:21] <vlad3> const& ;)
[19:36:14] <vlad3> Впрочем да. Наверное можно сделать T& и проверять, что T имеет const.
[19:36:47] <vlad3> Или не проверять. Грохнется само.
[19:36:56] <alexey.veselovsky> с указателем на константу прокатывает без проблем
[19:37:06] <alexey.veselovsky> то есть c const T* t
[19:37:27] <vlad3> Попробуй в оригинальном примере убрать const у ссылки
[19:37:35] <vlad3> Будет работать?
[19:38:09] <alexey.veselovsky> template <typename T> void f(const int T::*c, T& t){printf("%d\n", t.*c);}

[19:38:09] <vlad3> Для A a; и A const a;
[19:38:19] <alexey.veselovsky> такое не работает
[19:38:34] <alexey.veselovsky> ибо конфликт вывода типов
[19:38:36] <vlad3> Убери везде const
[19:38:42] <alexey.veselovsky> ненене
[19:38:53] <alexey.veselovsky> там такое: const.cpp:8:28: note: candidate template ignored: deduced conflicting types for parameter 'T' ('A' vs. 'A *')

[19:39:14] <vlad3> f(T& a, int T::*m);
[19:39:19] <alexey.veselovsky> то есть const тут и рядом не валялся
[19:39:54] <vlad3> Убери & в месте вызова ;)
[19:40:20] <alexey.veselovsky> а, это да.  это я зевнул
[19:40:36] <vlad3> Работает? :)
[19:41:01] <alexey.veselovsky> да
[19:41:19] <alexey.veselovsky> #include <stdio.h>

struct A {  
  const int c;
  A():c(10){}
};

template <typename T> void f(const int T::*c, const T& t){printf("%d\n", t.*c);}

int main() {
  A a;
  f(&A::c, a);
  return 0;
}

[19:41:27] <vlad3> А "A const a;"?
[19:41:30] <alexey.veselovsky> спокойно печатает мне мою десятку
[19:42:08] <vlad3> У меня такое не работало.
[19:42:22] <vlad3> Видимо от компилятора зависит
[19:42:32] <alexey.veselovsky> #include <stdio.h>

struct A {  
  const int c;
  A():c(10){}
};

template <typename T> void f(const int T::*c, const T& t){printf("%d\n", t.*c);}

int main() {
  const A a;
  f(&A::c, a);
  return 0;
}
[19:42:37] <alexey.veselovsky> работает все
[19:42:48] <alexey.veselovsky> да, у меня свежий компилер достаточно
[19:43:15] <alexey.veselovsky> а у тебя небось либо древний gcc либо вообще что-то мелкомягкое
[19:43:34] <alexey.veselovsky> хотя у меня и 4.2 g++ собирает это
[19:43:50] <alexey.veselovsky> алсо по стандарту оно должно собираться. см http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Ftemplate_argument_deduction.htm
[19:45:42] <alexey.veselovsky> (у меня, кстати, волшебным образом заработало именно после того как прочитал доку эту)
[19:45:45] <alexey.veselovsky> :-)
[19:50:02] <alexey.veselovsky> vlad2: ты бы проверил конкретно мой код. прямо копипастой. а то мало ли…
[19:56:19] <alexey.veselovsky> да, в линуксе тоже собирается
[19:56:31] <alexey.veselovsky> # g++ --version
g++ (Debian 4.4.5-8) 4.4.5
[19:56:57] <alexey.veselovsky> в яблоке соответственно
[19:57:02] <alexey.veselovsky> $ g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
[19:57:14] <alexey.veselovsky> и
[19:57:21] <alexey.veselovsky> $ clang++ --version
Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.0
Thread model: posix

[20:01:43] <alexey.veselovsky> какой красивый хак! http://habrahabr.ru/post/147075
[23:58:39] <alexey.veselovsky> /me сегодня пощупал еще раз MacBook Air 13"
[23:58:42] <alexey.veselovsky> /me ХОТЕТЬ!