#pragma once
#include <iostream>
#include <ostream>

// #define LOGGER (std::cout << __FILE__ << ":" << __LINE__)

struct Logger {
    Logger() = default;

    template <typename T>
    std::ostream& operator<<(T&& msg)
    {
        return std::cout << msg;
    }

    ~Logger()
    {
        std::cout << std::endl;
    }

};

struct IgnoreLogger {
    IgnoreLogger() = default;

    template <typename T>
    IgnoreLogger& operator<<(T&& msg)
    {
        return *this;
    }

    ~IgnoreLogger() = default;
    
};



#define logger() (Logger() << __FILE__ << ":" << __LINE__ << " ")

// #define logger1() (Logger() << __FILE__ << ":" << __LINE__ << " ")