google/fruit

Providing non-injected arguments to DI Objects

IrisPeter opened this issue · 14 comments

In the "Scaling Doubles Injection Test" you have the ScalerImpl class that needs a double parameter as well as in injected object of the Multiplier interface, so you have:

    class ScalerImpl : public Scaler
    {
    private:
    	Multiplier* multiplier;
    	double factor;
  
    public:
    	INJECT(ScalerImpl(ASSISTED(double) factor, Multiplier* multiplier)) : multiplier(multiplier), factor(factor) {}

    	double scale(double x) override
    	{
    	    	return multiplier->multiply(x, factor);
    	}
    };

If you wanted another object that needed a double parameter but didn't need any other injected object to do its work, would you still need the ASSISTED macro?

Also getScalerComponent instead uses an intermediary ScalerFactory that uses std::function and std::unique_ptr.

Is that the only way to create a component and pass a value to the constructor? Also why do components with standard parameters need std::unique_ptr or was that just specific to the example in that test project?

If you wanted another object that needed a double parameter but didn't need any other injected object to do its work, would you still need the ASSISTED macro?

If you use INJECT then yes.

Is that the only way to create a component and pass a value to the constructor?

No, there are other ways, depending on what you want to do.
To avoid the xy problem, could you please explain what are you trying to do?

Also why do components with standard parameters need std::unique_ptr or was that just specific to the example in that test project?

As you see the double param there is not wrapped in unique ptr.
You can also return objects by value from the factory.
I suspect there's an underlying question here that I'm not answering well because I don't know what you're trying to do. Once you provide more details on that we can discuss something more specific.

I have an interface IAssetGroup

    class IAssetGroup
    {
       public:
          virtual bool IsMotorGroup() const = 0;
    };

Then in AssetGroup.h I have

#include <fruit/fruit.h>

#include "IAssetGroup.h"

fruit::Component<IAssetGroup> getAssetGroupComponent();

Finally I have the implementation which was as follows:

    class AssetGroupImpl : public IAssetGroup
    {
    public:

       INJECT(AssetGroupImpl()) =default;

       virtual bool IsMotorGroup() const override
       {
    	return false;
       }
    };

    fruit::Component<IAssetGroup> getAssetGroupComponent()
    {
       return fruit::createComponent()
          .bind<IAssetGroup, AssetGroupImpl>();
    }

When I went back to the source of the original business object I noticed that this one took a int for the group as its only constructor parameter, I then modified the constructor to:

INJECT(AssetGroupImpl(ASSISTED(int) groupId)) : m_GroupId(groupId) {}

and added a member variable to hold it

As soon as I changed the constructor to the above with ASSISTED I got a load of compiler errors

1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: 'inline': used more than once 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: FRUIT_ALWAYS_INLINE inline T* MemoryPool::allocate(std::size_t n) { 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: 'inline': used more than once 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: FRUIT_ALWAYS_INLINE inline fruit::impl::meta::UnwrapType< 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: 'inline': used more than once 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: FRUIT_ALWAYS_INLINE inline int checkAcceptableComponentInstallArg() { 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\injection_errors.h(129,50): error C2338: static_assert failed: 'CandidateSignature was used as signature for a registerConstructor() (explicit or implicit via the INJECT macro / Inject typedef) but it contains an assisted parameter. When using assisted parametersYou need to inject a factory like std::function<std::unique_ptr<MyClass>(int, float)> instead of injecting MyClass directly. If you used an explicit registerConstructor(), you also need to switch that to registerFactory().' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\injection_errors.h(129,50): error C2338: static_assert(AlwaysFalse<CandidateSignature>::value, 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\injection_errors.h(129,50): error C2338: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51): message : see reference to class template instantiation 'fruit::impl::AssistedParamInRegisterConstructorSignatureError<AssetGroupImpl (fruit::Assisted<int>)>' being compiled 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51): message : inline Component<Params...>::Component(PartialComponent<Bindings...>&& partial_component) noexcept : storage() { 1>Src\AssetGroup.cpp(36): message : see reference to function template instantiation 'fruit::Component<IAssetGroup>::Component<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>>(fruit::PartialComponent<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>> &&) noexcept' being compiled 1>Src\AssetGroup.cpp(36): message : return fruit::createComponent() 1>Src\AssetGroup.cpp(36): message : see reference to function template instantiation 'fruit::Component<IAssetGroup>::Component<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>>(fruit::PartialComponent<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>> &&) noexcept' being compiled 1>Src\AssetGroup.cpp(36): message : return fruit::createComponent() 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: 'Result': is not a member of 'fruit::impl::meta::Error<ErrorTag,AssetGroupImpl (fruit::Assisted<int>)>' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: with 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: [ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: ErrorTag=fruit::impl::AssistedParamInRegisterConstructorSignatureErrorTag 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: ] 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: fruit::impl::meta::Eval<fruit::impl::meta::CheckNoLoopInDeps(typename Op::Result)>>::type(); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,81): error C2039: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : see declaration of 'fruit::impl::meta::Error<ErrorTag,AssetGroupImpl (fruit::Assisted<int>)>' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : with 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : [ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : ErrorTag=fruit::impl::AssistedParamInRegisterConstructorSignatureErrorTag 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : ] 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : using type = Error<ErrorTag, typename TypeUnwrapper<Args>::type...>; 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51,1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51,1): error C4430: inline Component<Params...>::Component(PartialComponent<Bindings...>&& partial_component) noexcept : storage() { 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51,1): error C4430: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,47): error C2825: 'Comp': must be a class or namespace when followed by '::' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,47): error C2825: using Loop = ProofForestFindLoop(typename Comp::Deps); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,47): error C2825: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::CheckNoLoopInDeps::apply<MetaExpr>' being compiled 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : with 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : [ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaExpr=int 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : ] 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type; 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::CheckNoLoopInDeps (int)>' being compiled 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(51): message : inline Component<Params...>::Component(PartialComponent<Bindings...>&& partial_component) noexcept : storage() { 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60): message : see reference to alias template instantiation 'fruit::impl::meta::Eval<fruit::impl::meta::CheckNoLoopInDeps(int)>' being compiled 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60): message : fruit::impl::meta::Eval<fruit::impl::meta::CheckNoLoopInDeps(typename Op::Result)>>::type(); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,53): error C2510: 'Comp': left of '::' must be a class/struct/union 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,53): error C2510: using Loop = ProofForestFindLoop(typename Comp::Deps); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,53): error C2510: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,1): error C2061: syntax error: identifier 'Deps' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,1): error C2061: using Loop = ProofForestFindLoop(typename Comp::Deps); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(954,1): error C2061: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,21): error C2226: syntax error: unexpected type 'fruit::impl::meta::IsNone' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,21): error C2226: using type = If(IsNone(Loop), Bool<true>, ConstructErrorWithArgVector(SelfLoopErrorTag, Loop)); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,21): error C2226: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,74): error C2059: syntax error: '(' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,74): error C2059: using type = If(IsNone(Loop), Bool<true>, ConstructErrorWithArgVector(SelfLoopErrorTag, Loop)); 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\component.h(955,74): error C2059: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: 'type': is not a member of 'fruit::impl::meta::CheckNoLoopInDeps::apply<MetaExpr>' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: with 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: [ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: MetaExpr=int 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: ] 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type; 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,76): error C2039: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : see declaration of 'fruit::impl::meta::CheckNoLoopInDeps::apply<MetaExpr>' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : with 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : [ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaExpr=int 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : ] 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type; 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: syntax error: missing '>' before identifier 'type' 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type; 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: ^ 1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,83): error C2039: 'type': is not a member of 'global namespace''
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,83): error C2039: MetaFun>::type::template apply<typename DoEval::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,83): error C2039: ^
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: syntax error: missing ';' before identifier 'type'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: MetaFun>::type::template apply<typename DoEval::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2146: ^
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2602: 'fruit::impl::meta::DoEval<fruit::impl::meta::CheckNoLoopInDeps (int)>::type' is not a member of a base class of 'fruit::impl::meta::DoEval<fruit::impl::meta::CheckNoLoopInDeps (int)>'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2602: MetaFun>::type::template apply<typename DoEval::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(102,1): error C2602: ^
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(100): message : see declaration of 'fruit::impl::meta::DoEval<fruit::impl::meta::CheckNoLoopInDeps (int)>::type'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(100): message : using type = typename DoEval<typename std::conditional<
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(253): message : see declaration of 'fruit::impl::meta::DoEval<fruit::impl::meta::CheckNoLoopInDeps (int)>'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\eval.h(253): message : using Eval = typename DoEval::type;
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,92): error C2955: 'fruit::impl::meta::CheckIfError': use of class template requires template argument list
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,92): error C2955: fruit::impl::meta::Eval<fruit::impl::meta::CheckNoLoopInDeps(typename Op::Result)>>::type();
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(60,92): error C2955: ^
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(28): message : see declaration of 'fruit::impl::meta::CheckIfError'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(28): message : struct CheckIfError {
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: 'numEntries': is not a member of 'fruit::impl::meta::Error<ErrorTag,AssetGroupImpl (fruit::Assisted)>'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: with
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: [
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: ErrorTag=fruit::impl::AssistedParamInRegisterConstructorSignatureErrorTag
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: ]
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: std::size_t num_entries = partial_component.storage.numBindings() + Op().numEntries();
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(63,76): error C2039: ^
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : see declaration of 'fruit::impl::meta::Error<ErrorTag,AssetGroupImpl (fruit::Assisted)>'
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : with
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : [
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : ErrorTag=fruit::impl::AssistedParamInRegisterConstructorSignatureErrorTag
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : ]
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\meta\errors.h(45): message : using type = Error<ErrorTag, typename TypeUnwrapper::type...>;
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(66,5): error C2064: term does not evaluate to a function taking 1 arguments
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(66,5): error C2064: Op()(entries);
1>Libraries\fruit-3.6.0\out\install\x86-Debug\Include\fruit\impl\component.defn.h(66,5): error C2064: ^
`

As you see the double param there is not wrapped in unique ptr. You can also return objects by value from the factory. I suspect there's an underlying question here that I'm not answering well because I don't know what you're trying to do. Once you provide more details on that we can discuss something more specific.

I think because you have using ScalerFactory = std::function<std::unique_ptr<Scaler>(double)>;

and then

  Injector<ScalerFactory> injector(getScalerComponent);
  ScalerFactory scalerFactory(injector);

  std::unique_ptr<Scaler> scaler = scalerFactory(12.1);
  std::cout << scaler->scale(3) << std::endl;

and are passing the int via scalerFactor led me to expect that maybe this was needed when passing parameters

I see, thanks for the info. This code:

    fruit::Component<IAssetGroup> getAssetGroupComponent()
    {
       return fruit::createComponent()
          .bind<IAssetGroup, AssetGroupImpl>();
    }

Specifically the fruit::Component<IAssetGroup> part, is telling Fruit that you want it to bind 1 IAssetGroup implementation in this injector (and then you could inject IAssetGroup somewhere).
But now that there's a parameter that you don't want Fruit to inject, there isn't a single IAssetGroup anymore.
And the caller needs to be updated to pass the int parameter on construction too.

This needs to be reflected in the return type.
You should change that to either:

    fruit::Component<std::function<IAssetGroup(int)>> getAssetGroupComponent()
    {
       return fruit::createComponent()
          .bind<IAssetGroup, AssetGroupImpl>();
    }

or

    fruit::Component<std::function<std::unique_ptr<IAssetGroup>(int)>> getAssetGroupComponent()
    {
       return fruit::createComponent()
          .bind<IAssetGroup, AssetGroupImpl>();
    }

And inject std::function<IAssetGroup(int)> or std::function<std::unique_ptr<IAssetGroup>(int)> in the caller (respectively).

Btw, you didn't explain what the int means, so I'm just assuming that you do want to have a factory.

If the int values that could be passed there are a small set that is known at compile time, you should probably use annotated injection instead of assisted injection.

I hope that helps.
Please close this if resolved, or provide other info / questions otherwise.

That doesn't seem to have worked, I'm not getting a clean compile. I'm also not sure how I inject std::function<IAssetGroup(int)> or std::function<std::unique_ptr<IAssetGroup>(int)> in the caller.

As to the int, it represents a group number. There are group numbers stored in a database that describe a particular group of assets. You can interrogate the groups to find out if for example it belongs go the Motor Group etc - bool IsMotorGroup() const

The original code had a static Create function that would create the group

static counted_ptr <CAssetGroup> Create(int grp);

which just called the private Constructor CAssetGroup::CAssetGroup(int grp)

The errors are as follows:

1>AssetGroup.cpp
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: FRUIT_ALWAYS_INLINE inline T* MemoryPool::allocate(std::size_t n) {
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: FRUIT_ALWAYS_INLINE inline fruit::impl::meta::UnwrapType<
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: FRUIT_ALWAYS_INLINE inline int checkAcceptableComponentInstallArg() {
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338: static_assert failed: 'std::function only accepts function types as template arguments.'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338:     static_assert(_Always_false<_Tx>, "std::function only accepts function types as template arguments.");
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338:                   ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : see reference to class template instantiation 'std::_Get_function_impl<_Fty>' being compiled
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :             _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\component.h(481): message : see reference to class template instantiation 'std::function<IAssetGroup (int)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\component.h(481): message :     using type = decltype(test<C>(nullptr));
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::HasInjectAnnotation::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<CondMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             CondMetaExpr=fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             AnnotatedC=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :             ElseMetaExpr=fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :   using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ThenMetaExpr=fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ElseMetaExpr=fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :   using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ThenMetaExpr=fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :   using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ThenMetaExpr=fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message :   using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             ThenMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ConstructError (__cdecl *)(fruit::impl::NonConstBindingRequiredButConstBindingProvidedErrorTag,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>)),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::Vector<>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(NonConstBindingRequired,fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::Vector<>))),fruit::impl::meta::ConstructError (__cdecl *)(fruit::impl::NonConstBindingRequiredButConstBindingProvidedErrorTag,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(Comp)),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetRequirements),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(NonConstBindingRequired),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetNonConstRequirements))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(Comp),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),NonConstBindingRequired),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),NonConstBindingRequired)),Comp),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(NonConstBindingRequired,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetRequirements)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(Comp,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<AnnotatedT>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<AnnotatedT>),fruit::impl::meta::AutoRegister (__cdecl *)(Comp,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT))))))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             AnnotatedT=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             NonConstBindingRequired=fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             T=fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::EnsureProvidedType (Comp,MetaExpr,MetaExpr,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             MetaExpr=fruit::impl::meta::Vector<>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<MaybeErrorMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             MaybeErrorMetaExpr=fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>)
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :   using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError (fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(Comp),fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(Comp))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type,fruit::impl::meta::ComponentFunctorIdentity>::type::apply<Comp>::Op))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             MetaExpr=fruit::impl::meta::EnsureProvidedType,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::Call (fruit::impl::meta::FoldVector (__cdecl *)(TypesToProvide,fruit::impl::meta::EnsureProvidedTypes::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,TypesToProvide,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>>::Helper,fruit::impl::meta::ComponentFunctorIdentity),Comp)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             TypesToProvide=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             MetaExpr=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::EnsureProvidedTypes (SourceComp,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetToVector (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>))))),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)))),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>)))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             SourceComp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             MetaExpr=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::ConvertComponent (Comp,MetaExpr)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :             MetaExpr=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<MaybeErrorMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message :             MaybeErrorMetaExpr=fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message :   using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message :             ElseMetaExpr=fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type,fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::Op)
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message :   using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : see reference to class template instantiation 'fruit::impl::meta::EvalPropagateError<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Type<I>,fruit::impl::meta::Type<C>>::type,fruit::impl::meta::ProcessDeferredBindings>::type::apply<fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>>::Op,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             MetaExpr=fruit::impl::meta::AddDeferredInterfaceBinding,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             I=IAssetGroup,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             C=AssetGroupImpl,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             PsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             NonConstRsPsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             DepsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             DeferredBindingFunctorsParam=fruit::impl::meta::EmptyList,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :             ElseMetaExpr=fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type,fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::Op)
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message :   using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError (fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Type<I>,fruit::impl::meta::Type<C>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(Comp),fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Type<I>,fruit::impl::meta::Type<C>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(Comp))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Type<I>,fruit::impl::meta::Type<C>>::type,fruit::impl::meta::ProcessDeferredBindings>::type,fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>>::type>::type::apply<Comp>::Op))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             MetaExpr=fruit::impl::meta::AddDeferredInterfaceBinding,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             I=IAssetGroup,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             C=AssetGroupImpl,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             PsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             NonConstRsPsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             DepsParam=fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :             DeferredBindingFunctorsParam=fruit::impl::meta::EmptyList
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message :       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::Call (fruit::impl::meta::ReverseComposeFunctors (fruit::impl::meta::ComponentFunctor (fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>),fruit::impl::meta::ProcessDeferredBindings,fruit::impl::meta::ProcessBinding (fruit::impl::Bind<IAssetGroup,AssetGroupImpl>)),fruit::impl::meta::ConstructComponentImpl (void))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             PsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             NonConstRsPsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             DepsParam=fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             DeferredBindingFunctorsParam=fruit::impl::meta::EmptyList
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :   using ConvertTo = Eval<Call(ReverseComposeFunctors(Id<ComponentFunctor(ConvertComponent, Comp)>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message : see reference to alias template instantiation 'fruit::impl::meta::Eval<fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (fruit::impl::meta::ComponentFunctor (fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>),fruit::impl::meta::ProcessDeferredBindings,fruit::impl::meta::ProcessBinding (fruit::impl::Bind<IAssetGroup,AssetGroupImpl>)),fruit::impl::meta::ConstructComponentImpl (void))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             PsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             NonConstRsPsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             DepsParam=fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :             DeferredBindingFunctorsParam=fruit::impl::meta::EmptyList
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(37): message :   using ConvertTo = Eval<Call(ReverseComposeFunctors(Id<ComponentFunctor(ConvertComponent, Comp)>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message : see reference to alias template instantiation 'fruit::impl::meta::OpForComponent<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>>::ConvertTo<fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             PsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             NonConstRsPsParam=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             DepsParam=fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :             DeferredBindingFunctorsParam=fruit::impl::meta::EmptyList
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component.defn.h(55): message :   using Op = typename fruit::impl::meta::OpForComponent<Bindings...>::template ConvertTo<Comp>;
1>VisualStudio Projects\Visual Studio 2022\Projects\C++\Examples\Fruit\OneAssistedInjection\AssetGroup.cpp(21): message : see reference to function template instantiation 'fruit::Component<std::function<IAssetGroup (int)>>::Component<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>>(fruit::PartialComponent<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>> &&) noexcept' being compiled
1>VisualStudio Projects\Visual Studio 2022\Projects\C++\Examples\Fruit\OneAssistedInjection\AssetGroup.cpp(21): message : 	return fruit::createComponent()
1>VisualStudio Projects\Visual Studio 2022\Projects\C++\Examples\Fruit\OneAssistedInjection\AssetGroup.cpp(21): message : see reference to function template instantiation 'fruit::Component<std::function<IAssetGroup (int)>>::Component<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>>(fruit::PartialComponent<fruit::impl::Bind<IAssetGroup,AssetGroupImpl>> &&) noexcept' being compiled
1>VisualStudio Projects\Visual Studio 2022\Projects\C++\Examples\Fruit\OneAssistedInjection\AssetGroup.cpp(21): message : 	return fruit::createComponent()
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039: 'type': is not a member of 'std::_Get_function_impl<_Fty>'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039:         with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039:         [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039:             _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039:         ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039: class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,51): error C2039:                                                   ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : see declaration of 'std::_Get_function_impl<_Fty>'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :             _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,1): error C2504: 'type': base class undefined
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,1): error C2504: class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032,1): error C2504: ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039: 'type': is not a member of 'std::_Get_function_impl<_Fty>'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:         with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:         [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:             _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:         ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:     using _Mybase = typename _Get_function_impl<_Fty>::type;
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,56): error C2039:                                                        ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : see declaration of 'std::_Get_function_impl<_Fty>'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :             _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message :         ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,1): error C2061: syntax error: identifier 'type'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,1): error C2061:     using _Mybase = typename _Get_function_impl<_Fty>::type;
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1034,1): error C2061: ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,35): error C2653: '_Mybase': is not a class or namespace name
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,35): error C2653:     template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,35): error C2653:                                   ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,26): error C2993: 'unknown-type': is not a valid type for non-type template parameter '__formal'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,26): error C2993:     template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1046,26): error C2993:                          ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,35): error C2653: '_Mybase': is not a class or namespace name
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,35): error C2653:     template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,35): error C2653:                                   ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,26): error C2993: 'unknown-type': is not a valid type for non-type template parameter '__formal'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,26): error C2993:     template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1101,26): error C2993:                          ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,1): error C4596: 'type': illegal qualified name in member declaration
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,1): error C4596:       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,1): error C4596: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,83): error C2061: syntax error: identifier 'type'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,83): error C2061:       MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117,83): error C2061:                                                                                   ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039: 'type': is not a member of 'fruit::impl::meta::DoEval<CondMetaExpr>'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:             CondMetaExpr=fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,63): error C2039:                                                               ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see declaration of 'fruit::impl::meta::DoEval<CondMetaExpr>'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             CondMetaExpr=fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,1): error C2146: syntax error: missing '>' before identifier 'type'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,1): error C2146:   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,1): error C2146: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,98): error C2039: 'type': is not a member of '`global namespace''
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,98): error C2039:   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,98): error C2039:                                                                                                  ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2146: syntax error: missing ';' before identifier 'type'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2146:   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2146:                                                                                   ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602: 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>::type' is not a member of a base class of 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:             AnnotatedC=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:             TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:             TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202,83): error C2602:                                                                                   ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see declaration of 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>::type'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             AnnotatedC=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message :   using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message : see declaration of 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :         with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :         [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :             AnnotatedC=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :             TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :             TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :             Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :         ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(115): message :   using type = typename DoEval<typename std::conditional<
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236,102): error C2955: 'fruit::impl::meta::EvalPropagateError': use of class template requires template argument list
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236,102): error C2955:   using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236,102): error C2955:                                                                                                      ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(219): message : see declaration of 'fruit::impl::meta::EvalPropagateError'
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(219): message : struct EvalPropagateError {

I've written a minimally non-working example project here - https://github.com/IrisPeter/MinimalFruitExample

Thanks @poletti-marco

That fixed the compile errors.

Question 1

How do I create a group so that I get an AssetGroupImpl that results in it having m_GroupId = 5

Previously I would have done:

auto someGroup = CAssetGroup::Create(5);

Question 2

How would I have been able to use fruit::Component<std::function<IAssetGroup(int)>> getAssetGroupComponent(), what code changes would be required.

I don't know whether I would need to touch AssetGroupImpl, or IAssetGroup or both!

Is it even possible to have something valid work with the above getAssetGroupComponent IAssetGroup is not its own a thing you would expect to be able copy as its only really a contract, it makes sense that the possible Impl classes themselves might decide one way or the other on copying?

How do I create a group so that I get an AssetGroupImpl that results in it having m_GroupId = 5

You inject the factory, then call it with 5.
If you want to do this at toplevel, it's just like https://github.com/google/fruit/wiki/tutorial:-assisted-injection.
If you want to inject it from another injected object, just replace IAssetGroup with std::function<std::unique_ptr(int)> in the places where you injected IAssetGroup before adding the assisted param.
std::function<std::unique_ptr(int)> is bound in a different way, but it's injected just like any other type, there's no special treatment there.

How would I have been able to use fruit::Component<std::function<IAssetGroup(int)>> getAssetGroupComponent(), what code changes would be required.

IAssetGroup is not a concrete class so it's not movable.
You need the std::unique_ptr there, you can't return IAssetGroup from a function by value.

If there's only 1 implementation, and you're ok exposing the implementation to the callers (which is probably not a good idea in most cases, but just for the sake of the argument) then you could have std::function<CAssetGroup(int)>> as long as CAssetGroup is at least movable.

I don't think I really understand what you mean when you say inject the factory.

In the Scaling Doubles Injection Test you have:

Injector<ScalerFactory> injector(getScalerComponent);
ScalerFactory scalerFactory(injector);

std::unique_ptr<Scaler> scaler = scalerFactory(12.1);
std::cout << scaler->scale(3) << std::endl;

Its not obvious to me that the factory is injected. Or should I be looking at a different sample that shows what you mean?

"injected" in this context means that you're getting an instance from the Fruit Injector.
In that case it's explicit, here:

ScalerFactory scalerFactory(injector);

Or it could be implicit, e.g. via constructor injection (https://github.com/google/fruit/wiki/quick-reference#constructor-injectionhttps://github.com/google/fruit/wiki/quick-reference#constructor-injection):

class Foo {
private:
  std::function<std::unique_ptr<IAssetGroup>(int)> create_group;
public:
  INJECT(Foo(
    std::function<std::unique_ptr<IAssetGroup>(int)> create_group)) : create_group(create_group) {
  }
  void do_stuff() {
    std::unique_ptr<IAssetGroup> group = create_group(5);
    if (group->is_motor_group()) { ...}
  }
};

Thanks @poletti-marco

That helps, so it looks like I want to do something along the lines of your Foo class above.

Foo.h

fruit::Component<fruit::Required<ISimpleInterfaceForInjection1, 
                                    ... IAssetGroup with factory using single int argument ...,
				 ISimpleInterfaceForInjection2>,
		IFoo>//IFoo requires multiple interfaces
 
getComplexComponent();

Foo.cpp

class Foo {
private:
  ISimpleInterfaceForInjection1* simpleInterface1;
  std::function<std::unique_ptr<IAssetGroup>(int)> create_group;
  ISimpleInterfaceForInjection2* simpleInterface2;

public:
  INJECT(Foo(ISimpleInterfaceForInjection1* simpleInterfaceForInjection1,
           std::function<std::unique_ptr<IAssetGroup>(int)> create_group,
           ISimpleInterfaceForInjection1* simpleInterfaceForInjection2)) : simpleInterface1(simpleInterfaceForInjection1), 
                                                                           simpleInterface2(simpleInterfaceForInjection2), 
                                                                           create_group(create_group) {
  }
  void do_stuff() {
    std::unique_ptr<IAssetGroup> group = create_group(5);
    if (group->is_motor_group()) { ... }
  }
};

In foo.h, what would the 2nd line that allows us to use an IAssetGroup factory be?

std::function<std::unique_ptr<IAssetGroup>(int)>

That said, not sure if you want to use fruit::Required here, instead of installing the component that provides std::function<std::unique_ptr<IAssetGroup>(int)> in getComplexComponent.
(in some cases that is the right thing to do, but in most cases you probably want the latter instead)