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

Сообщение Re[2]: std::is_constant_evaluated() от 13.04.2020 17:34

Изменено 13.04.2020 17:45 Videoman

Re[2]: std::is_constant_evaluated()
Здравствуйте, watchmaker, Вы писали:

W>Требуется же поддержка в компиляторе. Например, через __builtin_is_constant_evaluated как в gcc и clang.

С одной стороны я догадывался, а с другой эти фича задекларирована как расширение библиотеки. По-этому была надежда, вдруг это можно с помощью шаблонной магии разрулить и я что-то упускаю.

W>Пока только дать программисту две функции и попросить самому выбрать нужную:

W>
W>constexpr int constexpr_add(int a, int b);

W>int runtime_add(int a, int b);
W>

К сожалению не получается, т.к. у меня может быть куча вложенных constexpr-методов или конструкторов и где-то внутри вот такой вот constexpr_add/runtime_add. Т.е. придется дублировать разные методы, а главное классы вышке по иерархии, и так как методы с constexpr и без нельзя перегрузить, код перестанет компилироваться одно с другим.
Re[2]: std::is_constant_evaluated()
Здравствуйте, watchmaker, Вы писали:

W>Требуется же поддержка в компиляторе. Например, через __builtin_is_constant_evaluated как в gcc и clang.

С одной стороны я догадывался, а с другой эта фича задекларирована как расширение библиотеки. По-этому была надежда, вдруг это можно с помощью шаблонной магии разрулить и я что-то упускаю.

W>Пока только дать программисту две функции и попросить самому выбрать нужную:

W>
W>constexpr int constexpr_add(int a, int b);

W>int runtime_add(int a, int b);
W>

К сожалению не получается, т.к. у меня может быть куча вложенных constexpr-методов или конструкторов и где-то внутри вот такой вот constexpr_add/runtime_add. Т.е. придется дублировать разные методы, а главное классы вышке по иерархии, и так как методы с constexpr и без нельзя перегрузить, код перестанет компилироваться одно с другим.