This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

4364. SFINAE-friendliness on operator<< and operator>> for unspecified I/O manipulators

Section: 31.7.7 [std.manip], 31.7.8 [ext.manip], 31.7.9 [quoted.manip] Status: New Submitter: Jiang An Opened: 2025-09-05 Last modified: 2025-09-15

Priority: Not Prioritized

View other active issues in [std.manip].

View all other issues in [std.manip].

View all issues with New status.

Discussion:

Currently, it is unspecified whether any of operator<< or operator>> for the "unspecified" return type of an I/O manipulating function is SFINAE-friendly.

There's implementation divergence. E.g. the following program is consistently rejected by implementations although the standard doesn't strictly require it to be ill-formed. Among the implementations, libstdc++ and libc++ make the failure SFINAE-friendly, while MSVC STL doesn't (demo):

#include <iostream>
#include <iomanip>

int main() 
{
  std::cout << std::setfill(L'*');
}

It seems better to eliminate such implementation divergence. Perhaps it's also better to require them to be SFINAE-friendly to reduce potential conflicts with user-provided operators.

If it's intended to allow implementation divergence, perhaps we should clarify the intent.

Proposed resolution: