fix for ICC: decltype in base class

This commit is contained in:
bolero-MURAKAMI 2014-02-21 23:16:23 +09:00
parent b14c8e7d73
commit 1cfea12064
5 changed files with 13 additions and 11 deletions

View file

@ -11,6 +11,7 @@
#include <type_traits> #include <type_traits>
#include <sprout/config.hpp> #include <sprout/config.hpp>
#include <sprout/container/container_transform_traits.hpp> #include <sprout/container/container_transform_traits.hpp>
#include <sprout/type_traits/identity.hpp>
#include <sprout/type_traits/integral_constant.hpp> #include <sprout/type_traits/integral_constant.hpp>
namespace sprout { namespace sprout {
@ -31,7 +32,7 @@ namespace sprout {
#else #else
template<typename T> template<typename T>
struct has_rebind_size struct has_rebind_size
: public decltype(sprout::containers::detail::sprout_has_xxx_impl_check_template_rebind_size<T>(0)) : public sprout::identity<decltype(sprout::containers::detail::sprout_has_xxx_impl_check_template_rebind_size<T>(0))>::type
{}; {};
#endif #endif
} // namespace detail } // namespace detail

View file

@ -35,7 +35,7 @@ namespace sprout {
#else #else
template<typename T> template<typename T>
struct has_mem_generated_value struct has_mem_generated_value
: public decltype(sprout::generators::detail::has_mem_generated_value_test<T>::test(0)) : public sprout::identity<decltype(sprout::generators::detail::has_mem_generated_value_test<T>::test(0))>::type
{}; {};
#endif #endif
@ -110,7 +110,7 @@ namespace sprout {
#else #else
template<typename T> template<typename T>
struct has_mem_next_generator struct has_mem_next_generator
: public decltype(sprout::generators::detail::has_mem_next_generator_test<T>::test(0)) : public sprout::identity<decltype(sprout::generators::detail::has_mem_next_generator_test<T>::test(0))>::type
{}; {};
#endif #endif

View file

@ -11,6 +11,7 @@
#include <sprout/config.hpp> #include <sprout/config.hpp>
#include <sprout/preprocessor/cat.hpp> #include <sprout/preprocessor/cat.hpp>
#include <sprout/preprocessor/some_number.hpp> #include <sprout/preprocessor/some_number.hpp>
#include <sprout/type_traits/identity.hpp>
#include <sprout/type_traits/integral_constant.hpp> #include <sprout/type_traits/integral_constant.hpp>
// //
@ -35,7 +36,7 @@
sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TYPE), NAME), NUM)(long); \ sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TYPE), NAME), NUM)(long); \
template<typename T> \ template<typename T> \
struct NAME \ struct NAME \
: public decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TYPE), NAME), NUM)<T>(0)) \ : public sprout::identity<decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TYPE), NAME), NUM)<T>(0))>::type \
{} {}
#endif #endif
#define SPROUT_HAS_XXX_TYPE_DEF(NAME, TYPE) \ #define SPROUT_HAS_XXX_TYPE_DEF(NAME, TYPE) \
@ -65,7 +66,7 @@
sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_value_, VALUE), NAME), NUM)(long); \ sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_value_, VALUE), NAME), NUM)(long); \
template<typename T> \ template<typename T> \
struct NAME \ struct NAME \
: public decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_value_, VALUE), NAME), NUM)<T>(0)) \ : public sprout::identity<decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_value_, VALUE), NAME), NUM)<T>(0))>::type \
{} {}
#endif #endif
#define SPROUT_HAS_XXX_VALUE_DEF(NAME, VALUE) \ #define SPROUT_HAS_XXX_VALUE_DEF(NAME, VALUE) \
@ -95,7 +96,7 @@
sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TEMPLATE), NAME), NUM)(long); \ sprout::false_type SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TEMPLATE), NAME), NUM)(long); \
template<typename T> \ template<typename T> \
struct NAME \ struct NAME \
: public decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TEMPLATE), NAME), NUM)<T>(0)) \ : public sprout::identity<decltype(SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_CAT(sprout_has_xxx_impl_check_type_, TEMPLATE), NAME), NUM)<T>(0))>::type \
{} {}
#endif #endif
#define SPROUT_HAS_XXX_TEMPLATE_DEF(NAME, TEMPLATE) \ #define SPROUT_HAS_XXX_TEMPLATE_DEF(NAME, TEMPLATE) \

View file

@ -27,7 +27,7 @@ namespace sprout {
} // namespace detail } // namespace detail
template<typename T, typename Arg> template<typename T, typename Arg>
struct is_convert_constructible struct is_convert_constructible
: public decltype(sprout::detail::is_convert_constructible_test<T>::test(std::declval<Arg>())) : public sprout::identity<decltype(sprout::detail::is_convert_constructible_test<T>::test(std::declval<Arg>()))>::type
{}; {};
#if SPROUT_USE_TEMPLATE_ALIASES #if SPROUT_USE_TEMPLATE_ALIASES