Giter Club home page Giter Club logo

Comments (14)

poletti-marco avatar poletti-marco commented on June 24, 2024

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.

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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

from fruit.

poletti-marco avatar poletti-marco commented on June 24, 2024

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.

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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

from fruit.

poletti-marco avatar poletti-marco commented on June 24, 2024

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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?

from fruit.

poletti-marco avatar poletti-marco commented on June 24, 2024

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.

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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?

from fruit.

poletti-marco avatar poletti-marco commented on June 24, 2024

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

from fruit.

IrisPeter avatar IrisPeter commented on June 24, 2024

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?

from fruit.

poletti-marco avatar poletti-marco commented on June 24, 2024
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)

from fruit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.