Search code examples
c++structauto

Is it possible to have an "auto" member variable?


For example I wanted to have a variable of type auto because I'm not sure what type it will be.

When I try to declare it in class/struct declaration it's giving me this error:

Cannot deduce auto type. Initializer required

Is there a way around it?

struct Timer {

    auto start;

};

Solution

  • You can, but you have to declare it static and const:

    struct Timer {
        static const auto start = 0;
    };
    

    A working example in Coliru.

    With this limitation, you therefore cannot have start as a non-static member, and cannot have different values in different objects.

    If you want different types of start for different objects, better have your class as a template

    template<typename T>
    struct Timer {
        T start;
    };
    

    If you want to deduce the type of T, you can make a factory-like function that does the type deduction.

    template<typename T>
    Timer<typename std::decay<T>::type> MakeTimer(T&& startVal) {   // Forwards the parameter
       return Timer<typename std::decay<T>::type>{std::forward<T>(startVal)};
    }
    

    Live example.