No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

62 líneas
1.3 KiB

  1. #pragma once
  2. #include "checker.h"
  3. namespace cppmp
  4. {
  5. namespace __impl
  6. {
  7. /* bool_pack */
  8. template<bool...>
  9. struct bool_pack;
  10. /* is_specialization_of_impl */
  11. template<typename T, template <typename...> class T_template>
  12. struct is_specialization_of_impl
  13. : public false_t
  14. { };
  15. template<template <typename...> class T_template, typename... Ts>
  16. struct is_specialization_of_impl<T_template<Ts...>, T_template>
  17. : public true_t
  18. { };
  19. /* is_valid */
  20. template<typename T, std::size_t = sizeof(T)>
  21. std::true_type is_valid_impl(T *);
  22. std::false_type is_valid_impl(...);
  23. template<typename T>
  24. struct is_valid
  25. : public decltype(is_valid_impl(std::declval<T*>()))
  26. { };
  27. template<>
  28. struct is_valid<void>
  29. : public true_t
  30. { };
  31. }
  32. /* is_specialization_of */
  33. template<typename T, template <typename...> class T_template>
  34. struct is_specialization_of
  35. : public __impl::is_specialization_of_impl<T, T_template>
  36. { };
  37. /* is_true */
  38. template<bool... B>
  39. struct is_true
  40. : public is_same<__impl::bool_pack<true, B...>, __impl::bool_pack<B..., true>>
  41. { };
  42. }