};
template <class T> class TypedAnyStorage : public Context::AnyStorage {
- static_assert(std::is_same<typename std::decay<T>::type, T>::value,
+ static_assert(std::is_same<std::decay_t<T>, T>::value,
"Argument to TypedAnyStorage must be decayed");
public:
class [[nodiscard]] WithContextValue {
public:
template <typename T>
- WithContextValue(const Key<T> &K, typename std::decay<T>::type V)
+ WithContextValue(const Key<T> &K, std::decay_t<T> V)
: Restore(Context::current().derive(K, std::move(V))) {}
// Anonymous values can be used for the destructor side-effect.
}
private:
- static_assert(std::is_same<typename std::decay<T>::type, T>::value,
+ static_assert(std::is_same<std::decay_t<T>, T>::value,
"use a plain type: event values are always passed by const&");
std::recursive_mutex ListenersMu;