Информация об изменениях

Сообщение Re[15]: имя переменной в компайл-тайм от 18.03.2018 14:04

Изменено 18.03.2018 14:05 Маркуша Шулин

Re[15]: имя переменной в компайл-тайм
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ollv, Вы писали:


O>> Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.


R>Эта возможность есть в любом компиляторе,

это на мелкомягких не cкомпилируется. msvc13 на 15 вроде тоже пробовал.
static_assert("1"[1] == '1', "no ");


R>соответствующем требованиям стандарта языка. Вот здесь даже есть пример реализайции класса компайл-тайм строк (ищи class str_const).

я ж говорю — писал парсер регулярных выражний, на строковых литералах. Там все компайлтайм. чет типа такого :
static_assert(std::is_same<search<STR("w++"), STR("[\+]+")>::value, STR("++")>::value, "Not matched");


O>> Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит.


R>Это не выходит просто потому, что __PRETTY_FUNCTION__ не имеет внешнего связвания (external linkage), а вовсе не потому, что она не является компайл-тайм сущностью.

https://ideone.com/oXQVtY
ведет он себя как обычный эррей но не как строковый литерал.
В общем, давай просто разберемся, что я подразумевал под сущностью — он не может использоваться параметром шаблона. И не используем в pragma message больше ничего.
Re[15]: имя переменной в компайл-тайм
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ollv, Вы писали:


O>> Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.


R>Эта возможность есть в любом компиляторе,

это на мелкомягких не cкомпилируется. msvc13 на 15 вроде тоже пробовал.
static_assert("1"[1] == '1', "no ");


R>соответствующем требованиям стандарта языка. Вот здесь даже есть пример реализайции класса компайл-тайм строк (ищи class str_const).

я ж говорю — писал парсер регулярных выражний, на строковых литералах. Там все компайлтайм. чет типа такого :
static_assert(std::is_same<search<STR("w++"), STR("[\+]+")>::value, STR("++")>::value, "Not matched");


O>> Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит.


R>Это не выходит просто потому, что __PRETTY_FUNCTION__ не имеет внешнего связвания (external linkage), а вовсе не потому, что она не является компайл-тайм сущностью.

https://ideone.com/oXQVtY
ведет он себя как обычный эррей но не как строковый литерал.
В общем, давай просто разберемся, что я подразумевал под компайл тайм сущностью — он не может использоваться параметром шаблона. И не используем в pragma message больше ничего.