// Distributed under 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) // // Official repository: https://github.com/boostorg/beast // #pragma once #include #include #include namespace beast { namespace detail { template struct is_empty_base_optimization_derived : std::integral_constant::value && !boost::is_final::value> { }; template ::value> class empty_base_optimization : private T { public: empty_base_optimization() = default; empty_base_optimization(empty_base_optimization&&) = default; empty_base_optimization(empty_base_optimization const&) = default; empty_base_optimization& operator=(empty_base_optimization&&) = default; empty_base_optimization& operator=(empty_base_optimization const&) = default; template explicit empty_base_optimization(Arg1&& arg1, ArgN&&... argn) : T(std::forward(arg1), std::forward(argn)...) { } T& member() noexcept { return *this; } T const& member() const noexcept { return *this; } }; //------------------------------------------------------------------------------ template class empty_base_optimization { T t_; public: empty_base_optimization() = default; empty_base_optimization(empty_base_optimization&&) = default; empty_base_optimization(empty_base_optimization const&) = default; empty_base_optimization& operator=(empty_base_optimization&&) = default; empty_base_optimization& operator=(empty_base_optimization const&) = default; template explicit empty_base_optimization(Arg1&& arg1, ArgN&&... argn) : t_(std::forward(arg1), std::forward(argn)...) { } T& member() noexcept { return t_; } T const& member() const noexcept { return t_; } }; } // namespace detail } // namespace beast