#include <stdplus/exception.hpp>

// These will only be used if the compiler doesn't support them
#if !__has_builtin(__builtin_LINE)
int __builtin_LINE()
{
    return -1;
}
const char* __builtin_FILE()
{
    return "<unknown>";
}
const char* __builtin_FUNCTION()
{
    return "<unknown>";
}
#endif

namespace stdplus
{
namespace exception
{

WouldBlock::WouldBlock(const char* what) :
    std::system_error(std::make_error_code(std::errc::operation_would_block),
                      what)
{}

WouldBlock::WouldBlock(const std::string& what) :
    std::system_error(std::make_error_code(std::errc::operation_would_block),
                      what)
{}

Eof::Eof(const char* what) :
    std::system_error(std::make_error_code(std::errc::no_message_available),
                      what)
{}

Eof::Eof(const std::string& what) :
    std::system_error(std::make_error_code(std::errc::no_message_available),
                      what)
{}

} // namespace exception
} // namespace stdplus
