Cppgres
Build Postgres extensions in C++
Loading...
Searching...
No Matches
error.hpp
Go to the documentation of this file.
1
4#pragma once
5
6#include <string>
7#include <tuple>
8
9#include <iostream>
10
11#include "exception.hpp"
12
13namespace cppgres {
14
15void error(pg_exception e);
16void error(pg_exception e) {
17 ::errstart(ERROR, TEXTDOMAIN);
18#ifdef __GNUC__
19#pragma GCC diagnostic push
20#pragma GCC diagnostic ignored "-Wformat-security"
21#endif
22 ::errmsg("%s", e.message());
23#ifdef __GNUC__
24#pragma GCC diagnostic pop
25#endif
26 ::errfinish(__FILE__, __LINE__, __func__);
27 __builtin_unreachable();
28}
29
30template <typename T>
32 std::integral<std::decay_t<T>> ||
33 (std::is_pointer_v<std::decay_t<T>> &&
34 std::same_as<std::remove_cv_t<std::remove_pointer_t<std::decay_t<T>>>, char>) ||
35 std::is_pointer_v<std::decay_t<T>>;
36
37template <std::size_t N, error_formattable... Args>
38void report(int elevel, const char (&fmt)[N], Args... args) {
39 ::errstart(elevel, TEXTDOMAIN);
40#ifdef __GNUC__
41#pragma GCC diagnostic push
42#pragma GCC diagnostic ignored "-Wformat-security"
43#endif
44 ::errmsg(fmt, args...);
45#ifdef __GNUC__
46#pragma GCC diagnostic pop
47#endif
48 ::errfinish(__FILE__, __LINE__, __func__);
49 if (elevel >= ERROR) {
50 __builtin_unreachable();
51 }
52}
53} // namespace cppgres
Definition: error.hpp:31