Fix some copyright lines in folly/detail/ and folly/test/
[folly.git] / folly / Traits.h
index ebf69acf7e30628fe0f5d7b88811ad5966833e8d..cf094f09b15bac09b4e9dcce7f0863b99b32b5b0 100644 (file)
@@ -155,6 +155,18 @@ namespace folly {
 template <typename T>
 using _t = typename T::type;
 
+/**
+ * A type trait to remove all const volatile and reference qualifiers on a
+ * type T
+ */
+template <typename T>
+struct remove_cvref {
+  using type =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+};
+template <typename T>
+using remove_cvref_t = typename remove_cvref<T>::type;
+
 /**
  *  type_t
  *
@@ -220,15 +232,14 @@ using _t = typename T::type;
  */
 
 namespace traits_detail {
-template <class...>
+template <class T, class...>
 struct type_t_ {
-  template <class T>
-  using apply = T;
+  using type = T;
 };
 } // namespace traits_detail
 
 template <class T, class... Ts>
-using type_t = typename traits_detail::type_t_<Ts...>::template apply<T>;
+using type_t = typename traits_detail::type_t_<T, Ts...>::type;
 template <class... Ts>
 using void_t = type_t<void, Ts...>;
 
@@ -312,8 +323,9 @@ using is_trivially_copyable = std::is_trivially_copyable<T>;
 } // namespace traits_detail
 
 struct Ignore {
+  Ignore() = default;
   template <class T>
-  /* implicit */ Ignore(const T&) {}
+  constexpr /* implicit */ Ignore(const T&) {}
   template <class T>
   const Ignore& operator=(T const&) const { return *this; }
 };