FreeBSD Manual Pages
std::basic_ios::copyfmt(3) C++ Standard Libary std::basic_ios::copyfmt(3) NAME std::basic_ios::copyfmt - std::basic_ios::copyfmt Synopsis basic_ios& copyfmt( const basic_ios& other ); If other refers to the same object as *this, has no effects. Other- wise, copies the state of the stream other into *this. This is done in the following sequence: 1) Calls every callback registered by register_callback() passing erase_event as parameter. 2) Copies all member objects from other to *this except for rd- state(), the exception mask, and rdbuf(). In particular, makes copies of the locale, the formatting flags, the contents of the arrays std::ios_base::iword and std::ios_base::pword (but not the iword and pword pointers themselves), the callbacks, and the tied stream. 3) Calls every callback registered by register_callback() passing copyfmt_event as parameter. 4) Copies the exception mask from other to *this as if by calling exceptions(other.exceptions()). Parameters other - another stream to use as source Return value *this Notes The second pass through the callbacks may be used to deep-copy the user-defined objects pointed to by the pointers in std::ios_base::pword. copyfmt() may be used to save and restore the state of a stream. Boost provides a more fine-grained I/O state savers library for the same purpose. Example Makes the std::ofstream object "out" behave exactly like std::cout, including formatting, tie() to std::cin, etc. // Run this code #include <bitset> #include <climits> #include <fstream> #include <iostream> int main() { std::ofstream out; out.copyfmt(std::cout); // copy everything except rdstate and rd- buf out.clear(std::cout.rdstate()); // copy rdstate out.basic_ios<char>::rdbuf(std::cout.rdbuf()); // share the buffer out << "Hello, world\n"; auto bin = [](std::ios_base::fmtflags f) { return std::bitset<sizeof(std::ios_base::fmtflags) * CHAR_BIT> { static_cast<unsigned long long>(f) }; }; std::ofstream out2; std::cout << "1) out2.flags(): " << bin(out2.flags()) << '\n'; std::cout << "2) cout.flags(): " << bin(std::cout.flags()) << '\n'; std::cout.setf(std::ios::hex | std::ios::fixed | std::ios::boolal- pha); std::cout << "3) cout.flags(): " << bin(std::cout.flags()) << '\n'; out2.copyfmt(std::cout); // copy everything except rdstate and rd- buf std::cout << "4) out2.flags(): " << bin(out2.flags()) << '\n'; } Possible output: Hello, world 1) out2.flags(): 00000000000000000001000000000010 2) cout.flags(): 00000000000000000001000000000010 3) cout.flags(): 00000000000000000001000000001111 4) out2.flags(): 00000000000000000001000000001111 Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 256 C++98 step 3 called the registered callbacks with the corrected to event type copy_event, which is not defined copyfmt_event if other refers to the same object as *this, the LWG 292 C++98 member objects do nothing were still copied and the registered callbacks in this case were still called http://cppreference.com 2024.06.10 std::basic_ios::copyfmt(3)
NAME | Synopsis | Parameters | Return value | Notes | Example | Possible output:
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ios::copyfmt&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
