Title
SFINAE-friendliness on operator<< and operator>> for unspecified I/O manipulators
Status
new
Section
[std.manip][ext.manip][quoted.manip]
Submitter
Jiang An

Created on 2025-09-05.00:00:00 last changed 1 week ago

Messages

Date: 2025-09-05.00:00:00

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.

History
Date User Action Args
2025-09-05 00:00:00admincreate