The input std::istrstream, output std::ostrstream, and combined std::iostream stream classes are deprecated
since their introduction in the C++98 standard.
Those stream classes support two use cases, and their behavior differs vastly depending on how the object is constructed:
  -  When constructed without argument, the stream object manages a dynamically allocated buffer; 
-  When constructed from char*buffer and size, the stream object uses only the provided buffer.
The above behaviors make the strstream classes hard to use correctly. As illustration the str() member function:
  -  returns a buffer that has unclear ownership; 
-  does not return the size of readable characters nor guarantees null-termination of the buffer; 
-  may leak unless freeze(false)is called afterwards.
With the introduction of the std::spanstream, std::ispanstream and std::ospanstream C++23, all uses of the
std::strstream, std::ostrstream and std::ispanstream classes may be replaced, with one of the following
classes:
  -  std::stringstreamandstd::ostringstreamto use managed and growing buffer,
-  std::spanstream,std::ospanstreamandstd::ispanstreamto use preallocated buffer with fixed size.
This rule will raise an issue when the new object of strstream is created:
std::string printData(std::string_view entry, int count) {
  std::ostrstream os; // Noncompliant
  os << "The entry '" << entry << "' was repeated " << count << " times." << std::ends;
  char const* content = os.str();
  os.freeze(false);
  return std::string(content);
}
int readInt(std::istrstream);
void process() {
  readInt(std::istrstream("10")); // Noncompliant
}
Furthermore, the issue will be raised if a data member of the class is declared with one of strstream types:
class Printer {
  /* .... */
private:
  std::ostrstream os; // Noncompliant
};