Size: a a a

2020 August 16

ПК

Побитый Кирпич... in pro.cxx
magras
Мне все еще хотелось бы увидеть пример практической проблемы, которую решил бы if constexpr вне шаблонов.

Видя команды препроцессора мне становится очевидно, что это или platform specific код, или какие-то флаги сборки. Видя if constexpr я понимаю что это compile time. Зачем их смешивать с учетом того, что if constexpr не сможет заменить препроцессор?

Ну и я не вижу особых преимуществ кода
if constexpr (is_gcc)
 __intrinsic();
else
 general_case();


над
#if IS_GCC
 __intrinsic();
#else
 general_case();
#endif
В том то и дело, что есть стремление полностью заменить препроцессор
источник

ПК

Побитый Кирпич... in pro.cxx
Ofee
Опять же, целью if constexpr вряд ли была условная компиляция, скорее — уменьшение объемов SFINAE
Тогда хочется инструмент который даст полноценную условную компиляцию
источник

m

magras in pro.cxx
Побитый Кирпич
В том то и дело, что есть стремление полностью заменить препроцессор
Его нужно заменять не if constexpr.
источник

m

magras in pro.cxx
Побитый Кирпич
В том то и дело, что есть стремление полностью заменить препроцессор
Большую часть use case'ов макросов должна забрать рефлексия. Инклюды заменяются модулями. А условная компиляция через препроцессор у меня не вызывает особых проблем.
источник

m

magras in pro.cxx
Теоретически мне нравятся макросы растовские. Но сейчас я не уверен нужны ли они плюсам.
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Большую часть use case'ов макросов должна забрать рефлексия. Инклюды заменяются модулями. А условная компиляция через препроцессор у меня не вызывает особых проблем.
Проблема условной компиляции в препроцессоре в том, что в иф можно только простейшие вещи совать
источник

m

magras in pro.cxx
Побитый Кирпич
Проблема условной компиляции в препроцессоре в том, что в иф можно только простейшие вещи совать
А какие сложные условия на компиляцию нужны?
источник

ПК

Побитый Кирпич... in pro.cxx
magras
А какие сложные условия на компиляцию нужны?
На разных платформах разный sizeof у типа Foo. Я хочу в функции чекать sizeof и возвращать разные типы из функции. Щас я могу это сделать через constexpr if + фиктивный шаблонный контекст
источник

ПК

Побитый Кирпич... in pro.cxx
Но это как пример
источник

ПК

Побитый Кирпич... in pro.cxx
Вообщем полноценный if из с++ хочется
источник

m

magras in pro.cxx
Побитый Кирпич
На разных платформах разный sizeof у типа Foo. Я хочу в функции чекать sizeof и возвращать разные типы из функции. Щас я могу это сделать через constexpr if + фиктивный шаблонный контекст
Это не решается тайпдефом в компайлтайм?
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Это не решается тайпдефом в компайлтайм?
Тайпдеф на sizeof(Foo)?
источник

m

magras in pro.cxx
Побитый Кирпич
Тайпдеф на sizeof(Foo)?
using Bar = std::conditional_t<sizeof(Foo) < 42, int, long>;
источник

ПК

Побитый Кирпич... in pro.cxx
magras
using Bar = std::conditional_t<sizeof(Foo) < 42, int, long>;
Ты щас пытаешься придумать workaround для одного кейса. А ведь там в разных ветках можно не только разные типы возвращать но и писать код который невалиден в другой ветке
источник

ПК

Побитый Кирпич... in pro.cxx
Вариантов бесконечно много
источник

m

magras in pro.cxx
Побитый Кирпич
Вариантов бесконечно много
Да, но мне хотелось бы увидеть практическую проблему, а не foo в вакуме.
источник

ПК

Побитый Кирпич... in pro.cxx
Ну и constexpr if как раз был нужен чтоб не делать таких worksround-ов на sfinae и проч. Только для этого нужен шаблонный контекст
источник

A

Alex in pro.cxx
Снова прошу помощи, продолжаю продираться через шаблонные дебри. Это баг clang, или баг у меня в коде? Пока что похоже на первое.
https://godbolt.org/z/8M6sY5

Существенная функциональность в конце, первые 2/3 исходника - мои библиотечные велосипеды.
источник
2020 August 17

CD

Constantine Drozdov in pro.cxx
Alex
Снова прошу помощи, продолжаю продираться через шаблонные дебри. Это баг clang, или баг у меня в коде? Пока что похоже на первое.
https://godbolt.org/z/8M6sY5

Существенная функциональность в конце, первые 2/3 исходника - мои библиотечные велосипеды.
так разворачивай логику до ошибки, окажется потом что optional в constexpr не работает
источник

A

Alex in pro.cxx
Хмм. И не должен? В С++20
источник