libcruft-util/except.hpp

31 lines
978 B
C++
Raw Normal View History

2018-12-03 15:29:21 +11:00
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Copyright 2018 Danny Robson <danny@nerdcruft.net>
*/
#pragma once
#include <iosfwd>
namespace cruft {
2018-12-03 15:33:14 +11:00
/// A base exception class for all cruft libraries.
///
/// There is deliberately no `what` method as it's not always acceptable
/// to store a string that we can return a pointer to. Instead we rely on
/// the `describe` method to output to a std::ostream. The user can wrangle
/// that into a std::string if they need one.
2018-12-03 15:29:21 +11:00
class error {
public:
virtual ~error () = default;
virtual std::ostream& describe (std::ostream&) const noexcept = 0;
};
2018-12-03 15:33:14 +11:00
/// Use `error::describe` to render the supplied error object to a
/// std::ostream.
std::ostream&
operator<< (std::ostream &os, error const&);
2018-12-03 15:29:21 +11:00
}