| 36 | |
| 37 | // make_value_unknown {{{1 |
| 38 | template <class T> T make_value_unknown(const T& x) |
| 39 | { |
| 40 | if constexpr (std::is_constructible_v<T, const volatile T&>) { |
| 41 | const volatile T& y = x; |
| 42 | return y; |
| 43 | } else { |
| 44 | T y = x; |
| 45 | asm("" : "+m"(y)); |
| 46 | return y; |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | // for_constexpr {{{1 |
| 51 | template <typename T, T Begin, T End, T Stride = 1, typename F> |