Мой вопрос прост задать, но я думаю, трудно ответить.
В С++ 14 есть ли способ проверить, имеет ли вызываемый объект (функция, член функции, лямбда-функция, std::function и т. д.) побочный эффект или нет?
Если да, то как бы черты типа:
template <class T>
struct has_side_effects;
будет, как?
Меня устраивает трейт, который возвращает ложноположительный результат (говорит, что у функции есть побочные эффекты, а на самом деле их нет), но не приемлю трейт, который возвращает ложноотрицательный результат (говорит, что функция не имеет побочных эффектов, а она есть).
Например, мне нужна черта:
auto comparator = [](const auto& x, const auto& y){return y > x;};
bool result = std::has_side_effects<decltype(comparator)>::value;
вернуть false
.
constexpr
, если только это не гарантируется разработчиком.constexpr
функции могут иметь ответвления, приводящие к побочным эффектам. - person 101010   schedule 25.01.2016