To avoid needing to export a new symbol from the library (for now) the
new member function uses __attribute__((always_inline)).
libstdc++-v3/ChangeLog:
* include/std/ostream (operator<<(const volatile void*)):
Add new overload, as per P1147R1.
* testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc:
New test.
{ return *this << "nullptr"; }
#endif
+#if __cplusplus > 202002L
+ __attribute__((__always_inline__))
+ __ostream_type&
+ operator<<(const volatile void* __p)
+ { return _M_insert(const_cast<const void*>(__p)); }
+#endif
+
/**
* @brief Extracting from another streambuf.
* @param __sb A pointer to a streambuf
--- /dev/null
+// { dg-options "-std=gnu++23 -fno-inline" }
+// { dg-do link { target c++23 } }
+
+#include <iostream>
+
+int main()
+{
+ int i = 0;
+ volatile void* p = &i;
+ std::cout << p << std::endl;
+}