exception: Use source_location instead of compiler builtins
Change-Id: I11df2559c89726516a317fe8e2edc359d8871343
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/include/stdplus/exception.hpp b/include/stdplus/exception.hpp
index a7dbe8b..de8a355 100644
--- a/include/stdplus/exception.hpp
+++ b/include/stdplus/exception.hpp
@@ -1,15 +1,9 @@
#pragma once
#include <fmt/format.h>
+#include <source_location>
#include <system_error>
#include <utility>
-// Forward declare builtins in case they are unsupported
-#if !__has_builtin(__builtin_LINE)
-int __builtin_LINE();
-const char* __builtin_FILE();
-const char* __builtin_FUNCTION();
-#endif
-
namespace stdplus
{
namespace exception
@@ -28,9 +22,15 @@
};
template <typename F>
-auto ignore(F&& f, const char* file = __builtin_FILE(),
- int line = __builtin_LINE(),
- const char* func = __builtin_FUNCTION()) noexcept
+auto ignore(F&& f, const std::source_location location =
+ std::source_location::current())
+{
+ return ignore(std::forward<F>(f), location.file_name(), location.line(),
+ location.function_name());
+}
+
+template <typename F>
+auto ignore(F&& f, const char* file, int line, const char* func) noexcept
{
return
[f = std::move(f), file, line, func](auto&&... args) mutable noexcept {