    // Copyright (C) 2011  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #ifndef DLIB_ANY_FUNCTION_ARG_LIST
    #error "You aren't supposed to directly #include this file.  #include <dlib/any.h> instead."
    #endif

    #ifdef DLIB_ANY_FUNCTION_ARG_LIST

    // The case where function_type has a non-void return type
        template <typename function_type, typename Enabled>
        class any_function<function_type, Enabled, DLIB_ANY_FUNCTION_NUM_ARGS>
        {
    #define DLIB_ANY_FUNCTION_RETURN return
    #include "any_function_impl.h"
    #undef DLIB_ANY_FUNCTION_RETURN

        private:
            // You get a compiler error about this function being private if you try to assign
            // or copy between any_functions with different types.  You must only copy between
            // any_functions that represent functions with the same signature.
            template <typename T, typename U> any_function(const any_function<T,U>&);
        };

    // The case where function_type has a void return type
        template <typename function_type>
        class any_function<function_type, typename sig_traits<function_type>::type, DLIB_ANY_FUNCTION_NUM_ARGS>
        {
    #define DLIB_ANY_FUNCTION_RETURN
    #include "any_function_impl.h"
    #undef DLIB_ANY_FUNCTION_RETURN

        private:
            // You get a compiler error about this function being private if you try to assign
            // or copy between any_functions with different types.  You must only copy between
            // any_functions that represent functions with the same signature.
            template <typename T> any_function(const any_function<T>&);
        };

    #undef DLIB_ANY_FUNCTION_ARG_LIST
    #undef DLIB_ANY_FUNCTION_ARGS
    #undef DLIB_ANY_FUNCTION_NUM_ARGS

    #endif // DLIB_ANY_FUNCTION_ARG_LIST