Re[3]: концептуальный wish you happy debug
От: vopl Россия  
Дата: 20.11.24 08:21
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А есть внятное объяснение, почему это работает? ))


При каждом обращении на значение fable делается заново переисчисление Entropy (в связи с механизмом его поставки через дефолтное значение), а там кложура, которая каждый раз новая/уникальная. Таким образом каждый раз получаем новую инстанцию с новой Entropy, ну и как побочный эффект, перевычисляется наша полезная нагрузка. Кстати, такое не обязательно делать на констрейнтах, можно и на SFINAE
  например
#include <type_traits>

template <class T, auto e, class=void>
struct Fable : std::false_type {};

template <class T, auto e>
struct Fable<T, e, std::void_t<decltype(f(T{}))>> : std::true_type {};

template <class T, auto e = []{}>
constexpr bool fable = Fable<T, e>::value;

struct C{};
static_assert(!fable<C>);

void f(C);
static_assert(fable<C>);
Отредактировано 20.11.2024 10:48 vopl . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.