]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / rvalue_streams-2.cc
index 19e855954afd91fe20cc4d1378e05309ee7c22ea..48e56397706f8c7bb97d57a0f31cf5b1ef06bc18 100644 (file)
@@ -1,6 +1,6 @@
 // { dg-do compile { target c++11 } }
 
-// Copyright (C) 2015-2016 Free Software Foundation, Inc.
+// Copyright (C) 2015-2020 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -24,11 +24,64 @@ struct A {};
 void operator<<(std::ostream&, const A&) { }
 void operator>>(std::istream&, A&) { }
 
+class MyStream : private std::ostream, private std::istream
+{
+public:
+  MyStream& operator <<(const char*)
+  {
+    return *this;
+  }
+  MyStream& operator >>(int&)
+  {
+    return *this;
+  }
+};
+
+class MyStream2
+{
+public:
+  MyStream2& operator <<(const char*)
+  {
+    return *this;
+  }
+  MyStream2& operator >>(int&)
+  {
+    return *this;
+  }
+private:
+  operator std::ostream&();
+  operator std::istream&();
+};
+
+struct X { };
+
+std::ostream& operator<<(std::ostream& os, const X&) { return os; }
+std::istream& operator>>(std::istream& is, X&&) { return is; }
+
+struct O : std::ostream { };
+
+void operator<<(O&, X) = delete;
+
+struct I : std::istream { };
+
+void operator>>(I&, X) = delete;
+
 // PR libstdc++/65543
+// PR libstdc++/80675
+// PR libstdc++/80940
 int main()
 {
   A a;
 
   std::ostringstream() << a;
   std::istringstream() >> a;
+  MyStream stream{};
+  stream << "aaa";
+  int msi;
+  stream >> msi;
+  MyStream2 stream2{};
+  stream2 << "aaa";
+  stream2 >> msi;
+  O{} << X{};
+  I{} >> X{};
 }