libstdc++: Support printing volatile pointers (P1147R1)

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.
This commit is contained in:
Jonathan Wakely 2021-10-04 15:22:00 +01:00
parent 9e136807c5
commit 96955a82f0
2 changed files with 18 additions and 0 deletions

View File

@ -251,6 +251,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ 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

View File

@ -0,0 +1,11 @@
// { 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;
}