    // Copyright (C) 2015  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.

    #include <memory>
    #include <iostream>

    using namespace std;

    class testme
    {
    public:

        testme(testme&&) = default;
        testme(const testme&) = delete;

        template <typename T>
        auto auto_return(T f) -> decltype(f(4)) { return f(4); }

        template <typename T>
        auto auto_return(T f) -> decltype(f()) { return f(); }

        static int returnint() { return 0; }

        void dostuff()
        {
            thread_local int stuff1 = 999;
            auto x = 4;

            decltype(x) asdf = 9;

            auto f = []() { cout << "in a lambda!" << endl; };
            f();

            auto_return(returnint);
        }

        template <typename ...T>
        void variadic_template(
            T&& ...args
        )
        {
        }

        std::shared_ptr<int> asdf;
    };

    // ------------------------------------------------------------------------------------