I can t get enum class opertaors to work : I get an error as "FastOut<NMAX>::Flags FastOut<NMAX>::operator&(FastOut<NMAX>::Flags, FastOut<NMAX>::Flags)' must take either zero or one argument|
"

    template<int NMAX>
    class FastOut{
    enum class Flags;
    protected:
        char buffer[NMAX];
        std::map<Flags,bool>FM={(UP,0),(LOW,0),(BOOL,0)};
    public:
        friend  Flags operator&(Flags a,Flags b);
        FastOut();
        FastOut(const char *);
        FastOut(const std::string&);
        FastOut & operator << (int);
        FastOut & operator << (char);
        FastOut & operator << (long long);
        FastOut & operator << (float);
        FastOut & operator << (double);
        FastOut & operator << (char *);
        FastOut & operator << (const std::string &);
        FastOut & operator << (const FastOut&);
        void open(const char*);
        void open(const std::string&);
        void flush();
        void clear();
        ~FastOut();
    };
    template<int NMAX>
    typename FastOut<NMAX>::Flags FastOut<NMAX>::operator&(Flags a,Flags b){

    }


