Здравствуйте, YuriV, Вы писали:
YV>Здравствуйте, ollv, Вы писали:
YV>CTTI именно компайлтайм в отличии от стандартного typeinfo.
__PRETTY_FUNCTION__ не дает тип который может использоваться в compiletime хотя эта константа и формируется за счет compiletime.
error: ‘__PRETTY_FUNCTION__’ cannot appear in a constant-expression
вставь в cmpval __PRETTY_FUNCTION__ я об этом. Да и по сути меня волнует тут только один вопрос
— мессаджи которые помагают дебажить компайл тайм алгоритмику ..
CTTI и прочее, я не обсуждал.
YV>А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет.
И ?
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, YuriV, Вы писали:
YV>>CTTI именно компайлтайм в отличии от стандартного typeinfo. А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет.
R>Кстати, я вот этот момент несколько недогоняю. С одной стороны, такие макросы как __PRETTY_FUNCTION__ и __FUNCSIG__, хоть и являются нестандартными расширениями, тем не менее, это макросы препроцессора. С другой стороны, эти макросы определены только для тех шаблонных функций, которые прошли через инстанцирование, которое, как известно, выполняется на этапе компиляции (точнее говоря, в восьмой фазе трансляции, в ходе которой образуются т.н. instantiation units. Но так или иначе, это уже фаза, следующая после препроцессора). Вот и выходит, что это макросы, значение которых становится известным после/во время компиляции. Как так? Уж не по той ли причине их не торопятся вносить в стандарт, что их невозможно реализовать без размывания концепции?
Ах, в данном случае мне кажется удобство главное. Пока удобно и обеспечивает обратную совместимость, все гуд. Т.к. это напрямую деньги, так что появление этих сущнoстей (что на самом деле не совсем макрос т.к. лайфтайм у них не только на этапе работы препроцессора, как я понимаю.) в стандарте не столь важно. А вот их пропадание скорее всего маловероятно.
Куда более интересный вопрос .. апдейт по SG7
недавно приходило на группу :
ust as a heads up for those here in Jacksonville...
Our evening session tonight (2018-03-14) will actually cover *all* the reflection material this week. Unless we run out of time with substantial unfinished work, we will avoid the Friday evening session.
We will also briefly discuss a plan for offline feedback for p0957.
There are also late papers on implementation experience attached to the wiki (p0992, p0993). While we won't explicitly cover them as they arrived during the week and talking to folks I don't think people have had time to dig into them at all. But I want to draw folks' attention to this.
там и последнее ишью по компайлтайм рефлекшину на базе CLang ну и метаклассы Саттера и что-то Страуструпа
Вообще я по этим темам использую сложившуюся уже практику (как по мне) отдельеного описания метаинформации для классов, все никак не собирусь выкласть что-то сюда.
выглядит примерно так
struct mystruct
{
int f0_;
std::string f1_;
int foo(int a0, int a1, std::string const& a2);
};
METACLASS(mystruct, f0_, f1_, foo);
int main() {
myserializer() << mystruct { 0, "1" };
auto r = cast<int>(callbyname(mystruct{0, "1"}, "foo", 1, 2, "3"));
static_assert(metaclass_find_func<mystruct, foo_tag>::value, "Func not found.");
int r = call_by_tag<foo_tag>(mystruct{0, "1"}, 1, 2, "3");
//This a problem
make_json_call<foo_tag>(mystruct{0, "1"}, 1, 2, "3");
}
Так вот для такой практики, чтобы полностью удовлетворить рефлекшин ишью, надо знать имена аргументов если филды еще обработать препроцессором можно
, то с аргументами все сложнее и некрасивеею Потому мне тема показалась интересной.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, ollv, Вы писали:
YV>>А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет. O> И ?
Что И? Я говорил про CTTI, она свои функции выполняет, а про __PRETTY_FUNCTION__, которая не predefined macro вы заговорили. Если лень гуглить, то:
Expanding __func__ at preprocessing time requires the preprocessor to know which function it's processing. The preprocessor generally doesn't know that, because parsing happens after the preprocessor is already done. Some implementations combine the preprocessing and the parsing, and in those implementations, it would have been possible for __func__ to work the way you'd like it to. In fact, if I recall correctly, MSVC's __FUNCTION__ works like that. It's an unreasonable demand on implementations that separate the phases of translation though.
Здравствуйте, YuriV, Вы писали:
YV>Здравствуйте, ollv, Вы писали:
YV>>>А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет. O>> И ?
YV>Что И? Я говорил про CTTI,
А я говорил про __PRETTY_FUNCTION__ YV>она свои функции выполняет, а про __PRETTY_FUNCTION__, которая не predefined macro вы заговорили. Если лень гуглить, то:
Вот просто перечитайте сообщение —
__PRETTY_FUNCTION__ — не компайлтайм сущность, все. Инче всавьте это в компайлтайм параметром, в отличие от __FUNCSIG__ (в остальном они эквиваленты, дает сигнатуру фанкшина в момент инстанциации). Говорить тут больше не о чем.
YV>
YV>Expanding __func__ at preprocessing time requires the preprocessor to know which function it's processing. The preprocessor generally doesn't know that, because parsing happens after the preprocessor is already done. Some implementations combine the preprocessing and the parsing, and in those implementations, it would have been possible for __func__ to work the way you'd like it to. In fact, if I recall correctly, MSVC's __FUNCTION__ works like that. It's an unreasonable demand on implementations that separate the phases of translation though.
YV>
И?
YV>У майкрософта свой вэй
Претти фашкшин тоже генерируется на инстанциации метода, а значит — уже на этапе синтаксического анализа (причем на разных линиях трансляции могут иметь разные значения). А не препроцессинга,
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, ollv, Вы писали:
YV>>У майкрософта свой вэй O> Претти фашкшин тоже генерируется на инстанциации метода, а значит — уже на этапе синтаксического анализа (причем на разных линиях трансляции могут иметь разные значения). А не препроцессинга,
И? Как это мешает CTTI работать с типами в компайл-тайм? Она не может напечатать тип в выхлопе компайлера? Мне лично это не нужно, если нужно вам собирите гцц с патчем для поддержки static_print, ну или напишите в спортлоторазрабам гцц. Я вообще не пойму ваших претензий. Я писал конкретно про CTTI и о том что она использует трик с __PRETTY_FUNCTION__ — какое мне дело выводится этот макрос через прагму или нет? У меня тоже претензия, почему я не могу использовать в static_assert const char* str, как параметр шаблона могу, а как аргумент static_assert не могу? Это более удивительно.
Здравствуйте, YuriV, Вы писали:
YV>Здравствуйте, ollv, Вы писали:
YV>>>У майкрософта свой вэй O>> Претти фашкшин тоже генерируется на инстанциации метода, а значит — уже на этапе синтаксического анализа (причем на разных линиях трансляции могут иметь разные значения). А не препроцессинга,
YV>И? Как это мешает CTTI работать с типами в компайл-тайм? Она не может напечатать тип в выхлопе компайлера? Мне лично это не нужно, если нужно вам собирите гцц с патчем для поддержки static_print, ну или напишите в спортлоторазрабам гцц. Я вообще не пойму ваших претензий.
Я — практик, у меня нет притензий, а есть констатация факта. Не вижу смысла вести дискуссию ниочем. Мое заявление не касалось CTTI, оно касалось
1. что __PRETTY_FUNCTION__ не компайл тайм константа. все.
2. ну то, что это не макро, это и ежу понятно было с самого начала .. так, что я про это даже не говорил.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, ollv, Вы писали:
O>__PRETTY_FUNCTION__ — не компайлтайм сущность, все. Инче всавьте это в компайлтайм параметром, в отличие от __FUNCSIG__ (в остальном они эквиваленты, дает сигнатуру фанкшина в момент инстанциации). Говорить тут больше не о чем.
__PRETTY_FUNCTION__ — компайлтайм сущность (не прероцессор, но компайл тайм):
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, ollv, Вы писали:
O>>__PRETTY_FUNCTION__ — не компайлтайм сущность, все. Инче всавьте это в компайлтайм параметром, в отличие от __FUNCSIG__ (в остальном они эквиваленты, дает сигнатуру фанкшина в момент инстанциации). Говорить тут больше не о чем.
R>__PRETTY_FUNCTION__ — компайлтайм сущность (не прероцессор, но компайл тайм):
R>https://ideone.com/axqWj0
R>
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, ollv, Вы писали:
O>> Из данного примера выходит, что размер __PRETTY_FUNCTION__ компайл тайм сущность.
R>Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:
R>https://ideone.com/mPh41g
R>
static_assert("1"[0] == '1', "It is not a compiletime array");
Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.
что неплохо используется в MPLLIB И вполне парсить их, https://github.com/sabel83/mpllibs/blob/master/libs/safe_printf/example/validate/main.cpp
я даже часть парсера регулярок реализовывал на базе этого.
Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит. Хотя просто хотелось бы просто сделать из нее параметр для для прагмы мессадж ..
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, ollv, Вы писали:
O>Здравствуйте, rg45, Вы писали:
R>>Здравствуйте, ollv, Вы писали:
O>>> Из данного примера выходит, что размер __PRETTY_FUNCTION__ компайл тайм сущность.
R>>Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:
R>>https://ideone.com/mPh41g
R>>
O> static_assert("1"[0] == '1', "It is not a compiletime array");
O>
O> Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм. O>что неплохо используется в MPLLIB И вполне парсить их, O>https://github.com/sabel83/mpllibs/blob/master/libs/safe_printf/example/validate/main.cpp O>я даже часть парсера регулярок реализовывал на базе этого. O> Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит. Хотя просто хотелось бы просто сделать из нее параметр для для прагмы мессадж ..
Хотя, возможно конечно из него сделать — тот-же коспайл тайм стринг, я не пробовал .. сейчас не досуг. наверное распарсится, без проблем. Скорее он просто как литерал вкомпилируется в .o.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, ollv, Вы писали:
O> Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.
Эта возможность есть в любом компиляторе, соответствующем требованиям стандарта языка. Вот здесь даже есть пример реализайции класса компайл-тайм строк (ищи class str_const).
O> Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит.
Это не выходит просто потому, что __PRETTY_FUNCTION__ не имеет внешнего связвания (external linkage), а вовсе не потому, что она не является компайл-тайм сущностью.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, ollv, Вы писали:
O>> Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.
R>Эта возможность есть в любом компиляторе,
это на мелкомягких не cкомпилируется. msvc13 на 15 вроде тоже пробовал.
static_assert("1"[0] == '1', "no ");
R>соответствующем требованиям стандарта языка. Вот здесь даже есть пример реализайции класса компайл-тайм строк (ищи class str_const).
я ж говорю — писал парсер регулярных выражний, на строковых литералах. Там все компайлтайм. чет типа такого :
O>> Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит.
R>Это не выходит просто потому, что __PRETTY_FUNCTION__ не имеет внешнего связвания (external linkage), а вовсе не потому, что она не является компайл-тайм сущностью. https://ideone.com/oXQVtY
ведет он себя как обычный эррей но не как строковый литерал.
В общем, давай просто разберемся, что я подразумевал под компайл тайм сущностью — он не может использоваться параметром шаблона. И не используем в pragma message больше ничего.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.