4#include "Stroika/Foundation/Common/Concepts.h"
13 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
14 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
15 constexpr CountedValue<VALUE_TYPE, COUNTER_TYPE>::CountedValue ()
16 requires (default_initializable<VALUE_TYPE>)
17 : CountedValue{VALUE_TYPE{}}
20 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
21 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
22 constexpr CountedValue<VALUE_TYPE, COUNTER_TYPE>::CountedValue (ArgByValueType<ValueType> value, CounterType count)
27 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
28 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
29 template <convertible_to<VALUE_TYPE> VALUE2_TYPE, convertible_to<COUNTER_TYPE> COUNTER2_TYPE>
30 constexpr CountedValue<VALUE_TYPE, COUNTER_TYPE>::CountedValue (
const pair<VALUE2_TYPE, COUNTER2_TYPE>& src)
35 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
36 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
37 template <convertible_to<VALUE_TYPE> VALUE2_TYPE, convertible_to<COUNTER_TYPE> COUNTER2_TYPE>
38 constexpr CountedValue<VALUE_TYPE, COUNTER_TYPE>::CountedValue (
const CountedValue<VALUE2_TYPE, COUNTER2_TYPE>& src)
43 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
44 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
45 constexpr auto CountedValue<VALUE_TYPE, COUNTER_TYPE>::operator<=> (
const CountedValue& rhs)
const
46 requires (three_way_comparable<VALUE_TYPE>)
48 return tie (fValue, fCount) <=> tie (rhs.fValue, rhs.fCount);
50 template <
typename VALUE_TYPE,
typename COUNTER_TYPE>
51 requires (default_initializable<COUNTER_TYPE> and unsigned_integral<COUNTER_TYPE>)
52 constexpr bool CountedValue<VALUE_TYPE, COUNTER_TYPE>::operator== (
const CountedValue& rhs)
const
53 requires (equality_comparable<VALUE_TYPE>)
55 return fValue == rhs.fValue and fValue == rhs.fValue;