Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Providing non-injected arguments to DI Objects #144

Closed
IrisPeter opened this issue Sep 23, 2022 · 14 comments
Closed

Providing non-injected arguments to DI Objects #144

IrisPeter opened this issue Sep 23, 2022 · 14 comments

Comments

@IrisPeter
Copy link

IrisPeter commented Sep 23, 2022

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?

@poletti-marco
Copy link
Contributor

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.

@IrisPeter
Copy link
Author

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

@IrisPeter
Copy link
Author

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: ^
`

@IrisPeter
Copy link
Author

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

@poletti-marco
Copy link
Contributor

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.

@IrisPeter
Copy link
Author

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

@poletti-marco
Copy link
Contributor

poletti-marco commented Sep 26, 2022 via email

@IrisPeter
Copy link
Author

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);

@IrisPeter
Copy link
Author

IrisPeter commented Sep 26, 2022

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?

@poletti-marco
Copy link
Contributor

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.

@IrisPeter
Copy link
Author

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?

@poletti-marco
Copy link
Contributor

"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()) { ...}
  }
};

@IrisPeter
Copy link
Author

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?

@poletti-marco
Copy link
Contributor

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants