// Copyright (c) 2014 Agustin Berge // // Use, modification and distribution are subject to 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) #ifdef TEST_STD # include #else # include #endif #include "test.hpp" #include "check_integral_constant.hpp" #include #if !defined(BOOST_NO_CXX11_FINAL) template struct final_template final {}; #endif template struct non_final_template {}; TT_TEST_BEGIN(is_final) BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); #endif BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); #if !defined(BOOST_NO_CXX11_FINAL) // // These are "soft" checks: since we cannot implement this trait // ourselves and instead rely on the compiler. // # ifndef BOOST_IS_FINAL BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final::value, true, false); BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final::value, true, false); BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final >::value, true, false); BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final const>::value, true, false); # else BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, true); # if !BOOST_WORKAROUND(BOOST_MSVC, <= 1800) BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final >::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final const>::value, true); # endif # endif #else std::cout << "\n\n" "This compiler version does not provide support for is_final on\n" "final types.n" "\n"; #endif BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final >::value, false); TT_TEST_END