34    using ValueType = NumberType;
 
   36    template <SomeCounterImpl ImplType = CounterImpl<ValueType>>
 
   37        requires std::same_as<ValueType, typename std::remove_cvref_t<ImplType>::ValueType>
 
   38    AnyCounterBase(ImplType&& impl = ImplType{})
 
   39        : pimpl_(std::make_unique<
Model<ImplType>>(std::forward<ImplType>(impl)))
 
   47        virtual void add(ValueType) = 0;
 
   49        virtual void set(ValueType) = 0;
 
 
   55    template <SomeCounterImpl ImplType>
 
   57        template <SomeCounterImpl SomeImplType>
 
   58            requires std::same_as<ImplType, SomeImplType>
 
   59        Model(SomeImplType&& impl) : impl(std::forward<SomeImplType>(impl))
 
   64        add(ValueType value)
 override 
   70        set(ValueType v)
 override 
   76        value()
 const override 
 
   84    std::unique_ptr<Concept> pimpl_;