From fbc50bfd1237da7c428257c52362b1ae234fb475 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Thu, 10 May 2018 11:34:02 +0100 Subject: [PATCH] is_virtual_base_of: more workarounds for clang and older gcc versions --- include/boost/type_traits/is_virtual_base_of.hpp | 5 +++-- test/is_virtual_base_of_test.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/boost/type_traits/is_virtual_base_of.hpp b/include/boost/type_traits/is_virtual_base_of.hpp index cf890b9..f9e1331 100644 --- a/include/boost/type_traits/is_virtual_base_of.hpp +++ b/include/boost/type_traits/is_virtual_base_of.hpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace detail { @@ -24,7 +25,7 @@ namespace boost { #pragma GCC system_header #endif -#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_CXX11_NULLPTR) && !BOOST_WORKAROUND(BOOST_GCC, <= 40800) +#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_CXX11_NULLPTR) && !BOOST_WORKAROUND(BOOST_GCC, < 40800) #ifdef __clang__ @@ -32,7 +33,7 @@ namespace boost { constexpr bool is_virtual_base_impl(...) { return true; } template(std::declval()))>* = + boost::void_t()))>* = nullptr> constexpr bool is_virtual_base_impl(int) { return false; } diff --git a/test/is_virtual_base_of_test.cpp b/test/is_virtual_base_of_test.cpp index aa6435c..4b77b45 100644 --- a/test/is_virtual_base_of_test.cpp +++ b/test/is_virtual_base_of_test.cpp @@ -132,7 +132,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), true); -#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_CXX11_NULLPTR) +#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_CXX11_NULLPTR) && !BOOST_WORKAROUND(BOOST_GCC, < 40800) BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); #ifndef BOOST_NO_CXX11_FINAL BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false);