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

@ -1,9 +1,9 @@
/*=============================================================================
Copyright (c) 2011-2014 Bolero MURAKAMI
https://github.com/bolero-MURAKAMI/Sprout
Copyright (c) 2011-2014 Bolero MURAKAMI
https://github.com/bolero-MURAKAMI/Sprout
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#ifndef SPROUT_CONFIG_COMPILER_INTEL_HPP
#define SPROUT_CONFIG_COMPILER_INTEL_HPP

View file

@ -11,6 +11,7 @@
#include <type_traits>
#include <sprout/config.hpp>
#include <sprout/container/container_transform_traits.hpp>
#include <sprout/type_traits/identity.hpp>
#include <sprout/type_traits/integral_constant.hpp>
namespace sprout {
@ -31,7 +32,7 @@ namespace sprout {
#else
template<typename T>
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
} // namespace detail

View file

@ -35,7 +35,7 @@ namespace sprout {
#else
template<typename T>
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
@ -110,7 +110,7 @@ namespace sprout {
#else
template<typename T>
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

View file

@ -11,6 +11,7 @@
#include <sprout/config.hpp>
#include <sprout/preprocessor/cat.hpp>
#include <sprout/preprocessor/some_number.hpp>
#include <sprout/type_traits/identity.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); \
template<typename T> \
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
#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); \
template<typename T> \
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
#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); \
template<typename T> \
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
#define SPROUT_HAS_XXX_TEMPLATE_DEF(NAME, TEMPLATE) \

View file

@ -27,7 +27,7 @@ namespace sprout {
} // namespace detail
template<typename T, typename Arg>
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