template <typename T>
struct is_copy_assignable {
template<class F>
- static auto get(F*) -> decltype(std::declval<T &>() = std::declval<const T &>(), std::true_type{});
+ static auto get(F*) -> decltype(std::declval<F &>() = std::declval<const F &>(), std::true_type{});
static std::false_type get(...);
static constexpr bool value = decltype(get((T*)nullptr))::value;
};
template <typename T>
struct is_move_assignable {
template<class F>
- static auto get(F*) -> decltype(std::declval<T &>() = std::declval<T &&>(), std::true_type{});
+ static auto get(F*) -> decltype(std::declval<F &>() = std::declval<F &&>(), std::true_type{});
static std::false_type get(...);
static constexpr bool value = decltype(get((T*)nullptr))::value;
};