// 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::detail { template struct IsEmptyBaseOptimizationDerived : std::integral_constant && !boost::is_final::value> { }; template ::value> class EmptyBaseOptimization : private T { public: EmptyBaseOptimization() = default; EmptyBaseOptimization(EmptyBaseOptimization&&) = default; EmptyBaseOptimization(EmptyBaseOptimization const&) = default; EmptyBaseOptimization& operator=(EmptyBaseOptimization&&) = default; EmptyBaseOptimization& operator=(EmptyBaseOptimization const&) = default; template explicit EmptyBaseOptimization(Arg1&& arg1, ArgN&&... argn) : T(std::forward(arg1), std::forward(argn)...) { } T& member() noexcept { return *this; } [[nodiscard]] T const& member() const noexcept { return *this; } }; //------------------------------------------------------------------------------ template class EmptyBaseOptimization { T t_; public: EmptyBaseOptimization() = default; EmptyBaseOptimization(EmptyBaseOptimization&&) = default; EmptyBaseOptimization(EmptyBaseOptimization const&) = default; EmptyBaseOptimization& operator=(EmptyBaseOptimization&&) = default; EmptyBaseOptimization& operator=(EmptyBaseOptimization const&) = default; template explicit EmptyBaseOptimization(Arg1&& arg1, ArgN&&... argn) : t_(std::forward(arg1), std::forward(argn)...) { } T& member() noexcept { return t_; } T const& member() const noexcept { return t_; } }; } // namespace beast::detail