fix type-traits

This commit is contained in:
bolero-MURAKAMI 2012-04-13 21:23:49 +09:00
commit 3eafabb1ed
15 changed files with 202 additions and 136 deletions

View file

@ -19,6 +19,14 @@ namespace sprout {
struct is_expr<T const>
: public sprout::weed::traits::is_expr<T>
{};
template<typename T>
struct is_expr<T volatile>
: public sprout::weed::traits::is_expr<T>
{};
template<typename T>
struct is_expr<T const volatile>
: public sprout::weed::traits::is_expr<T>
{};
template<typename Tag, typename... Args>
struct is_expr<sprout::weed::expr<Tag, Args...> >
: public std::true_type

View file

@ -18,6 +18,14 @@ namespace sprout {
struct is_c_str<T const>
: public sprout::weed::traits::is_c_str<T>
{};
template<typename T>
struct is_c_str<T volatile>
: public sprout::weed::traits::is_c_str<T>
{};
template<typename T>
struct is_c_str<T const volatile>
: public sprout::weed::traits::is_c_str<T>
{};
template<std::size_t N>
struct is_c_str<char const[N]>
: public std::true_type

View file

@ -18,6 +18,14 @@ namespace sprout {
struct is_char_type<T const>
: public sprout::weed::traits::is_char_type<T>
{};
template<typename T>
struct is_char_type<T volatile>
: public sprout::weed::traits::is_char_type<T>
{};
template<typename T>
struct is_char_type<T const volatile>
: public sprout::weed::traits::is_char_type<T>
{};
template<>
struct is_char_type<char>
: public std::true_type

View file

@ -20,6 +20,14 @@ namespace sprout {
struct is_container<T const>
: public sprout::weed::traits::is_container<T>
{};
template<typename T>
struct is_container<T volatile>
: public sprout::weed::traits::is_container<T>
{};
template<typename T>
struct is_container<T const volatile>
: public sprout::weed::traits::is_container<T>
{};
template<typename T, std::size_t N>
struct is_container<sprout::array<T, N> >
: public std::true_type

View file

@ -19,6 +19,14 @@ namespace sprout {
struct is_string<T const>
: public sprout::weed::traits::is_string<T>
{};
template<typename T>
struct is_string<T volatile>
: public sprout::weed::traits::is_string<T>
{};
template<typename T>
struct is_string<T const volatile>
: public sprout::weed::traits::is_string<T>
{};
template<typename T, std::size_t N, typename Traits>
struct is_string<sprout::basic_string<T, N, Traits> >
: public std::true_type

View file

@ -19,6 +19,14 @@ namespace sprout {
struct is_tuple<T const>
: public sprout::weed::traits::is_tuple<T>
{};
template<typename T>
struct is_tuple<T volatile>
: public sprout::weed::traits::is_tuple<T>
{};
template<typename T>
struct is_tuple<T const volatile>
: public sprout::weed::traits::is_tuple<T>
{};
template<typename... Types>
struct is_tuple<sprout::tuples::tuple<Types...> >
: public std::true_type

View file

@ -13,12 +13,24 @@ namespace sprout {
//
template<typename T>
struct is_unused
: public std::is_same<T, sprout::weed::unused>
: public std::false_type
{};
template<typename T>
struct is_unused<T const>
: public sprout::weed::traits::is_unused<T>
{};
template<typename T>
struct is_unused<T volatile>
: public sprout::weed::traits::is_unused<T>
{};
template<typename T>
struct is_unused<T const volatile>
: public sprout::weed::traits::is_unused<T>
{};
template<>
struct is_unused<sprout::weed::unused>
: public std::true_type
{};
} // namespace traits
} // namespace weed
} // namespace sprout