I wrote up the simple example that shows what I am trying to figure out

 

Basically, I am trying to pull the deduced return type (or explicitly passed as a template param in lambda bind()) in my template:

 

Any help or direction is greatly appreciated

 

      template <typename CURRIEDTYPE>

      // Id class for currying type without creating the object

      class Id

      {

            public:

                  typedef CURRIEDTYPE TYPE;

      };

      // Explictly pass IN a return type

      template < typename TFUNCTOR, typename TRET>

      TRET CallFctorPassInRet ( TFUNCTOR & functor, Id<TRET> & )

      {

            Id<TRET>::TYPE TRet;

            TRet = functor();

            return TRet;

      }

 

      std::string ReturnAString()

      {

            return "this is a string";

      }

 

      // try to get return type from the lambda fctor

      // Below does not compile- but it is along the lines of what I

      // WANT to do- note that I am trying to get from the Lambda functor the deduced return type

      template < typename TFUNCTOR>

      TFUNCTOR::result_type CallFctorDeduceRet( TFUNCTOR & functor)

      {

            return functor();

      }

     

     

      void Test_LambdaRetDeduction()

      {

            std::cout << "CallFctorPassInRet returns [" << CallFctorPassInRet( bind(&ReturnAString), Id<std::string>()) << "]" << std::endl;

           

            // below is what I want to make work

             std::cout << "CallFctorDeduceRet returns [" << CallFctorDeduceRet( bind<std::string>(&ReturnAString)) << "]" << std::endl;

            }