#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__ << " ")