libshit

Just some random shit
git clone https://git.neptards.moe/neptards/libshit.git
Log | Files | Refs | Submodules | README | LICENSE

xutility (1486B)


      1 // -*- c++ -*-
      2 #pragma once
      3 
      4 #include <climits>
      5 #include <cstdlib>
      6 #include <utility>
      7 
      8 #pragma push_macro("inline")
      9 #define inline constexpr inline
     10 #pragma push_macro("inline")
     11 #define inline inline _Pragma("pop_macro(\"inline\")")
     12 #pragma push_macro("inline")
     13 #define inline inline _Pragma("pop_macro(\"inline\")")
     14 
     15 #define iterator_traits dummy_iterator_traits
     16 #include_next<xutility>
     17 #undef iterator_traits
     18 #pragma pop_macro("inline")
     19 
     20 namespace std
     21 {
     22   // create sfinae friendly iterator traits
     23   namespace Detail
     24   {
     25     template <typename T, typename = void> struct iterator_traits0 {};
     26     template <typename T>
     27     struct iterator_traits0<T, std::void_t<
     28       typename T::difference_type, typename T::value_type, typename T::pointer,
     29       typename T::reference, typename T::iterator_category>>
     30     {
     31       using difference_type	  = typename T::difference_type;
     32       using value_type	       = typename T::value_type;
     33       using pointer	          = typename T::pointer;
     34       using reference	        = typename T::reference;
     35       using iterator_category	= typename T::iterator_category;
     36     };
     37   }
     38 
     39   template <typename T>
     40   struct iterator_traits : Detail::iterator_traits0<T> {};
     41 
     42   template <typename T>
     43   struct iterator_traits<T*>
     44   {
     45     using difference_type	  = std::ptrdiff_t;
     46     using value_type	       = std::remove_cv_t<T>;
     47     using pointer	          = T*;
     48     using reference	        = T&;
     49     using iterator_category	= std::random_access_iterator_tag;
     50   };
     51 }