2 // Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // Official repository: https://github.com/boostorg/beast
10 #ifndef BOOST_BEAST_DETAIL_EMPTY_BASE_OPTIMIZATION_HPP
11 #define BOOST_BEAST_DETAIL_EMPTY_BASE_OPTIMIZATION_HPP
13 #include <boost/type_traits/is_final.hpp>
14 #include <type_traits>
22 struct is_empty_base_optimization_derived
23 : std::integral_constant<bool,
24 std::is_empty<T>::value &&
25 ! boost::is_final<T>::value>
29 template<class T, int UniqueID = 0,
31 is_empty_base_optimization_derived<T>::value>
32 class empty_base_optimization : private T
35 empty_base_optimization() = default;
36 empty_base_optimization(empty_base_optimization&&) = default;
37 empty_base_optimization(empty_base_optimization const&) = default;
38 empty_base_optimization& operator=(empty_base_optimization&&) = default;
39 empty_base_optimization& operator=(empty_base_optimization const&) = default;
41 template<class Arg1, class... ArgN>
43 empty_base_optimization(Arg1&& arg1, ArgN&&... argn)
44 : T(std::forward<Arg1>(arg1),
45 std::forward<ArgN>(argn)...)
54 T const& member() const noexcept
60 //------------------------------------------------------------------------------
66 class empty_base_optimization <T, UniqueID, false>
71 empty_base_optimization() = default;
72 empty_base_optimization(empty_base_optimization&&) = default;
73 empty_base_optimization(empty_base_optimization const&) = default;
74 empty_base_optimization& operator=(empty_base_optimization&&) = default;
75 empty_base_optimization& operator=(empty_base_optimization const&) = default;
77 template<class Arg1, class... ArgN>
79 empty_base_optimization(Arg1&& arg1, ArgN&&... argn)
80 : t_(std::forward<Arg1>(arg1),
81 std::forward<ArgN>(argn)...)
90 T const& member() const noexcept