#pragma once
#ifndef NDEBUG
#   define Assert(condition, message) \
    do { \
        if (! (condition)) { \
            std::cerr << "Assertion '" #condition "' failed in " << __FILE__ \
                      << " line " << __LINE__ << ": " << message << std::endl; \
            assert(condition); \
        } \
    } while (false)
#else
#   define Assert(condition, message) do { } while (false)
#endif