]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/type_traits/test/is_final_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / type_traits / test / is_final_test.cpp
CommitLineData
7c673cae
FG
1
2// Copyright (c) 2014 Agustin Berge
3//
4// Use, modification and distribution are subject to the
5// Boost Software License, Version 1.0. (See accompanying file
6// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
7c673cae
FG
8#ifdef TEST_STD
9# include <type_traits>
10#else
11# include <boost/type_traits/is_final.hpp>
12#endif
11fdf7f2
TL
13#include "test.hpp"
14#include "check_integral_constant.hpp"
7c673cae
FG
15#include <iostream>
16
92f5a8d4
TL
17#if !defined(BOOST_NO_CXX11_FINAL)
18template <class T>
19struct final_template final
20{};
21#endif
22template <class T>
23struct non_final_template
24{};
25
7c673cae
FG
26TT_TEST_BEGIN(is_final)
27
28 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int>::value, false);
29 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<const int>::value, false);
30 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<volatile int>::value, false);
31 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int*>::value, false);
32 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int* const>::value, false);
33 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int[2]>::value, false);
34 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int&>::value, false);
35#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
36 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<int&&>::value, false);
37#endif
38 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<mf4>::value, false);
39 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<f1>::value, false);
40 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<enum_UDT>::value, false);
41
42#if !defined(BOOST_NO_CXX11_FINAL)
43 //
44 // These are "soft" checks: since we cannot implement this trait
45 // ourselves and instead rely on the compiler.
46 //
47# ifndef BOOST_IS_FINAL
48 BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_UDT>::value, true, false);
49 BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_UDT const>::value, true, false);
92f5a8d4
TL
50 BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> >::value, true, false);
51 BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> const>::value, true, false);
7c673cae
FG
52# else
53 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_UDT>::value, true);
54 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_UDT const>::value, true);
92f5a8d4
TL
55# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1800)
56 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> >::value, true);
57 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<final_template<int> const>::value, true);
58# endif
7c673cae
FG
59# endif
60#else
61 std::cout <<
62 "\n<note>\n"
63 "This compiler version does not provide support for is_final on\n"
64 "final types.n"
65 "</note>\n";
66#endif
67
68 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT>::value, false);
69 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT const>::value, false);
70 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT volatile>::value, false);
71 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<empty_UDT>::value, false);
72 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<std::iostream>::value, false);
73
74 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT*>::value, false);
75 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT[2]>::value, false);
76 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<UDT&>::value, false);
77 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<void>::value, false);
78
79 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<test_abc1>::value, false);
80 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo0_t>::value, false);
81 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo1_t>::value, false);
82 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo2_t>::value, false);
83 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo3_t>::value, false);
84 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<foo4_t>::value, false);
92f5a8d4 85 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_final<non_final_template<int> >::value, false);
7c673cae
FG
86
87TT_TEST_END
88
89
90
91
92
93
94
95
96