exception: Fix for older clang

Clang prior to 15 did not implement source_location and requires use of
an experimental header.

Change-Id: I14cc49cb36553397217143dcbb6d4c1dcd99fdbf
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/include/stdplus/exception.hpp b/include/stdplus/exception.hpp
index de8a355..88bf9cb 100644
--- a/include/stdplus/exception.hpp
+++ b/include/stdplus/exception.hpp
@@ -4,10 +4,24 @@
 #include <system_error>
 #include <utility>
 
+#if __has_builtin(__builtin_source_location)
+#include <source_location>
+#else
+#include <experimental/source_location>
+#endif
+
 namespace stdplus
 {
 namespace exception
 {
+namespace detail
+{
+#if __has_builtin(__builtin_source_location)
+using source_location = std::source_location;
+#else
+using source_location = std::experimental::source_location;
+#endif
+} // namespace detail
 
 struct WouldBlock : public std::system_error
 {
@@ -22,8 +36,8 @@
 };
 
 template <typename F>
-auto ignore(F&& f, const std::source_location location =
-                       std::source_location::current())
+auto ignore(F&& f, const detail::source_location location =
+                       detail::source_location::current())
 {
     return ignore(std::forward<F>(f), location.file_name(), location.line(),
                   location.function_name());