Fix for is_final which works around GCC bug, see https://github.com/boostorg/type_traits/issues/69

This commit is contained in:
jzmaddock
2018-05-07 18:50:28 +01:00
parent 1305001a58
commit 356635219b
2 changed files with 11 additions and 1 deletions

View File

@ -20,7 +20,7 @@
namespace boost {
#ifdef BOOST_IS_FINAL
template <class T> struct is_final : public integral_constant<bool, BOOST_IS_FINAL(typename remove_cv<T>::type)> {};
template <class T> struct is_final : public integral_constant<bool, BOOST_IS_FINAL(T)> {};
#else
template <class T> struct is_final : public integral_constant<bool, false> {};
#endif

View File

@ -14,6 +14,13 @@
#include "check_integral_constant.hpp"
#include <iostream>
template <class T>
struct final_template final
{};
template <class T>
struct non_final_template
{};
TT_TEST_BEGIN(is_final)
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int>::value, false);
@ -38,9 +45,11 @@ TT_TEST_BEGIN(is_final)
# ifndef BOOST_IS_FINAL
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_UDT const>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> >::value, true, false);
# else
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_UDT>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_UDT const>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> >::value, true);
# endif
#else
std::cout <<
@ -67,6 +76,7 @@ TT_TEST_BEGIN(is_final)
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo2_t>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo3_t>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo4_t>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<non_final_template<int> >::value, false);
TT_TEST_END