forked from boostorg/type_traits
Fix for is_final which works around GCC bug, see https://github.com/boostorg/type_traits/issues/69
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user