carb::EmptyMemberPair

Defined in carb/Defines.h

Inheritance Relationships

Base Type

  • private First

template<class First, class Second, bool = std::is_empty<First>::value && !std::is_final<First>::value>
class carb::EmptyMemberPair : private First

Attempts to invoke the Empty Member Optimization by inheriting from the First element if possible, which, if empty will eliminate the storage necessary for an empty class; the Second element is always stored as a separate member. The First element is inherited from if it is an empty class/struct and is not declared final.

tparam First

The first element of the pair that the pair will inherit from if empty and not final.

tparam Second

The second element of the pair that will always be a member.

Public Types

using FirstType = First

Type of the First element.

using SecondType = Second

Type of the Second element.

Public Functions

template<class ...Args2>
inline explicit constexpr EmptyMemberPair(ValueInitFirst, Args2&&... args)

Constructor that default-initializes the First member and passes all arguments to the constructor of Second.

Parameters

args – arguments passed to the constructor of second.

template<class Arg1, class ...Args2>
inline explicit constexpr EmptyMemberPair(InitBoth, Arg1 &&arg1, Args2&&... args2)

Constructor that initializes both members.

Parameters
  • arg1 – the argument that is forwarded to the First constructor.

  • args2 – arguments passed to the constructor of second.

inline constexpr FirstType &first() noexcept

Non-const access to First.

Returns

a non-const reference to First.

inline constexpr const FirstType &first() const noexcept

Const access to First.

Returns

a const reference to First.

Public Members

SecondType second

Direct access to the Second member.