#pragma once #include #include #include namespace cppmp { /** * @brief Evaluates to void. */ template using void_t = void; /** * @brief Store a single type. */ template struct type_t { }; #ifdef cppmp_supports_variable_templates template constexpr decltype(auto) type_v = type_t { }; #endif /** * @brief Simple type list. */ template struct list { }; /** * @brief Inherit from all passed types. */ template struct inherit : public T... { }; /** * @brief Type to wrap constant values at compile time. */ template struct integral_constant : public std::integral_constant { }; /** * @brief Boolean constant type. */ template struct bool_t : public integral_constant { }; /** * @brief True boolean constant type. */ struct true_t : public bool_t { }; /** * @brief False boolean constant type. */ struct false_t : public bool_t { }; /** * @brief Size contant type. */ template struct size_t : public integral_constant { }; /** * @brief Zero zize constant type. */ struct zero_t : public size_t<0> { }; }